Esto también puede ser resuelto con Python, en la línea de comandos:
python -c "import os,sys;[os.system(' '.join(sys.argv[1:]).format(p)) for p in os.getenv('PATH').split(':')]" echo {}
o como una alias:
alias foreachpath="python -c \"import os,sys;[os.system(' '.join(sys.argv[1:]).format(p)) for p in os.getenv('PATH').split(':')]\""
Con Ejemplo de uso:
foreachpath echo {}
La ventaja de este enfoque es que {}
será reemplazado por cada trayectoria en sucesión. Esto se puede usar para construir todo tipo de comandos, por ejemplo, para listar el tamaño de todos los archivos y directorios en los directorios en $PATH
. incluyendo directorios con espacios en el nombre:
foreachpath 'for e in "{}"/*; do du -h "$e"; done'
Aquí hay un ejemplo que acorta la longitud de la variable $PATH
mediante la creación de enlaces simbólicos a todos los archivos y directorios en el $PATH
en $HOME/.allbin
. Esto no es útil para el uso diario, pero puede ser útil si se recibe el mensaje de error too many arguments
en un recipiente docker
, porque bitbake
utiliza la plena $PATH
como parte de la línea de comandos ...
mkdir -p "$HOME/.allbin"
python -c "import os,sys;[os.system(' '.join(sys.argv[1:]).format(p)) for p in os.getenv('PATH').split(':')]" 'for e in "{}"/*; do ln -sf "$e" "$HOME/.allbin/$(basename $e)"; done'
export PATH="$HOME/.allbin"
Esto debería también, en teoría, acelera el uso normal de shell y los scripts de shell, ya que hay menos rutas para buscar cada comando que se ejecuta. Se es bastante hacky, sin embargo, por lo que no recomendamos que nadie acortar su $PATH
esta manera.
Los foreachpath
alias puede ser útil, sin embargo.
¿Y qué pasa si contienen espacios? –
Según tengo entendido, esto no funciona cuando cualquiera de las subcadenas contiene espacios, que es exactamente por lo que $ PATH usa un separador que no es de espacio. La respuesta de @ choroba a continuación es correcta en este sentido. – intelfx
@intelfx: la pregunta está etiquetada [tag: linux]. Si tiene espacios en su * MANPATH * en Linux, entonces está haciendo mal Linux. Q.E.D. –