現在の作業ディレクトリ/フォルダー名を bash スクリプトで取得するにはどうすればよいでしょうか。あるいは、ターミナル コマンドだけで取得できるとさらに良いでしょう。
pwd
現在の作業ディレクトリの完全なパスを示します。ただし/opt/local/bin
、必要なのは だけですbin
。
ベストアンサー1
ベースネームは不要で、特にサブシェルでpwdを実行する必要もありません(余分な、そして高価なフォーク操作を追加する); シェルはこれを内部的に実行できる。パラメータ拡張:
result=${PWD##*/} # to assign to a variable
result=${result:-/} # to correct for the case where PWD=/
printf '%s\n' "${PWD##*/}" # to print to stdout
# ...more robust than echo for unusual names
# (consider a directory named -e or -n)
printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
# ...useful to make hidden characters readable.
このテクニックを他の状況(ではなく、ディレクトリ名を保持する他の変数)に適用する場合はPWD
、末尾のスラッシュを削除する必要があることに注意してください。以下はbashのextglob サポート末尾に複数のスラッシュがあっても機能します:
dirname=/path/to/somewhere//
shopt -s extglob # enable +(...) glob syntax
result=${dirname%%+(/)} # trim however many trailing slashes exist
result=${result##*/} # remove everything before the last / that still remains
result=${result:-/} # correct for dirname=/ case
printf '%s\n' "$result"
あるいは、 なしでextglob
:
dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}" # remove everything before the last /
result=${result:-/} # correct for dirname=/ case