Muestra PATH de una manera legible por humanos

Quiero mostrar mi variable de entorno PATH de una manera más legible para los humanos.

$ echo $PATH /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin:/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/bin:/usr/local/git/bin:/Users/arturo/.gvm/groovy/current/bin:/Users/arturo/.gvm/grails/current/bin:/Users/arturo/.gvm/griffon/current/bin:/Users/arturo/.gvm/gradle/current/bin:/Users/arturo/.gvm/lazybones/current/bin:/Users/arturo/.gvm/vertx/current/bin:/Users/arturo/.gvm/bin:/Users/arturo/.gvm/ext:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin 

Estoy pensando en algo como esto:

 $ echo $PATH | some cut and awk magic /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin /Users/arturo/.rvm/bin ... 

Puedes usar tr .

 $ tr ':' '\n' <<< "$PATH" /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin ... 

También puedes hacer esto en algunos shells (probado en bash y zsh):

 echo -e ${PATH//:/\\n} 

En zsh, puede usar la variable $path para ver su ruta con espacios en lugar de dos puntos.

 $ echo $path /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin /Users/arturo/.rvm/bin 

Que se puede combinar con printf o print .

 $ printf "%s\n" $path /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin ... $ print -l $path /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin ... 

Los operadores <<< se llaman herestrings. Herestrings pasa la palabra a su derecha a la input estándar del command a su izquierda.

 $ cat <<< 'Hello there' Hello there 

Si su caparazón no los admite, use echo y una tubería.

 $ echo 'Hello there' | cat Hello there 

Aquí hay una manera rápida de bash

 OLDIFS=$IFS IFS=: arr=($PATH) IFS=$OLDIFS printf "%s\n" "${arr[@]}" 

Tenga en count que una RUTA no establecida tiene un significado diferente de una RUTA vacía. Una RUTA vacía contiene un elemento vacío, y eso significa search ejecutables solo en el directory actual, una RUTA no establecida significa search ejecutables en una list pnetworkingeterminada de directorys (pero tenga en count que en algunos sistemas, no todas las herramientas aceptan el contenido de esa list)

En zsh :

 if (($+PATH)); then echo "$#path element(s):" printf '%q\n' "$path[@]" else echo "PATH unset" fi 

En shells POSIX (tenga en count que zsh incluso en modo sh no es POSIX en ese sentido):

 if [ -n "${PATH+.}" ]; then ( p=$PATH: set -f IFS=: set -- $p echo "$# element(s):" printf '"%s"\n' "$@" ) else echo "PATH unset" fi