私の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
...
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
bash
を使用した簡単な方法を次に示します
OLDIFS=$IFS IFS=: arr=($PATH) IFS=$OLDIFS
printf "%s\n" "${arr[@]}"
Smith John's ソリューションを展開すると、これにより.bash_profile
にNiceエイリアスが作成されます。
alias MyPath='echo -e ${PATH//:/\\n}'
未設定の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