Mostra o PATH de uma maneira legível por humanos

32

Eu quero mostrar minha variável de ambiente PATH de uma forma mais legível para 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

Estou pensando em algo assim:

$ 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
...
    
por Arturo Herrero 20.06.2013 / 17:13

4 respostas

51

Você pode 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
...

Você também pode fazer isso em alguns shells (testados no bash e zsh):

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

No zsh, você pode usar a variável $path para ver seu caminho com espaços em vez de dois pontos.

$ 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 pode ser combinado com printf ou 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
...

Os operadores <<< são chamados de herestrings. Herestrings passam a palavra à direita para a entrada padrão do comando à esquerda.

$ cat <<< 'Hello there'
Hello there

Se o seu shell não os suporta, use echo e um pipe.

$ echo 'Hello there' | cat
Hello there
    
por 20.06.2013 / 17:24
4

Aqui está uma maneira rápida com bash

OLDIFS=$IFS IFS=: arr=($PATH) IFS=$OLDIFS
printf "%s\n" "${arr[@]}"
    
por 20.06.2013 / 18:06
1

Observe que um PATH não definido possui um significado diferente de um PATH vazio. Um PATH vazio contém um elemento vazio, e isso significa procurar executáveis somente no diretório atual, um PATH não configurado significa procurar executáveis em uma lista padrão de diretórios (mas note que em alguns sistemas, nem toda ferramenta concorda com o conteúdo de executáveis). essa lista)

Em zsh :

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

Em shells POSIX (note que zsh mesmo no modo sh não é POSIX a esse respeito):

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

Expandindo a solução Smith de Smith, isso cria um bom alias no seu .bash_profile :

alias MyPath='echo -e ${PATH//:/\n}'
    
por 10.05.2018 / 02:04