web-dev-qa-db-ja.com

人間が読める方法でPATHを表示する

私のPATH環境変数をより人間が読みやすい方法で表示したいと思います。

$ 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

私はこのようなもので考えています:

$ 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
...
50
Arturo Herrero

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
...

一部のシェル(bashおよびzshでテスト済み)でもこれを行うことができます。

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

Zshでは、$path変数を使用して、コロンの代わりにスペースを含むパスを表示します。

$ 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

printfまたは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
...

<<<演算子はヘレストリングと呼ばれます。ヒア文字列は、Wordを右側のコマンドの標準入力の左側に渡します。

$ cat <<< 'Hello there'
Hello there

シェルがそれらをサポートしていない場合は、echoとパイプを使用します。

$ echo 'Hello there' | cat
Hello there
70
user26112

bashを使用した簡単な方法を次に示します

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

Smith John's ソリューションを展開すると、これにより.bash_profileにNiceエイリアスが作成されます。

alias MyPath='echo -e ${PATH//:/\\n}'
2
Justin Palmer

未設定のPATHは、空のPATHとは意味が異なることに注意してください。空のPATHには1つの空の要素が含まれます。つまり、現在のディレクトリでのみ実行可能ファイルを検索します。未設定のPATHは、デフォルトのディレクトリリストで実行可能ファイルを検索します(ただし、システムによっては、すべてのツールがそのリスト)

zsh内:

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

POSIXシェルでは(zshモードであってもshはその点でPOSIXではないことに注意してください):

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