現在の作業ディレクトリを取得する方法は? [コピー]

現在の作業ディレクトリを取得する方法は? [コピー]

現在の作業ディレクトリを変数に渡すスクリプトが必要です。ディレクトリが必要な部分はこんな感じですdir = pwdpwd現在の作業ディレクトリを変数に入れる方法のみを印刷します。

答え1

そうする必要はありません。存在する変数:

$ echo "$PWD"
/home/terdon

変数PWDPOSIXで定義すべてのPOSIX互換シェルで動作します。

障害者

シェルとCDユーティリティで設定されます。シェルでは、次のように環境で値を初期化する必要があります。 PWD値が実行時に環境のシェルに渡される場合、値は現在の作業ディレクトリの絶対パス名であり、{PATH_MAX}バイト(終了nullバイトを含む)を超えず、値には次のものは含まれません。ポイントまたはポイントポイントコンポーネントの場合、シェルはPWDを環境の値に設定する必要があります。それ以外の場合、実行時環境が現在の作業ディレクトリの絶対パス名であるPWD値をシェルに渡し、その値にポイントまたはポイントポイントコンポーネントが含まれていない場合、シェルはPWDを次に設定することを指定しません。環境の値はまだPWDをpwd -Pによって出力されるパス名に設定します。それ以外の場合、shユーティリティはPWDをpwd -Pによって出力されるパス名に設定します。 PWD が環境の値に設定されている場合、その値にはシンボリックリンクタイプファイルを参照するコンポーネントを含めることができます。 PWDがpwd -Pによってパス名出力に設定されている場合、現在の作業ディレクトリまたはそのディレクトリの親ディレクトリにパス名を決定するのに十分な権限がない場合、PWD値は指定されません。この変数の割り当ては無視できます。アプリケーションが PWD 値を設定または設定解除する場合、cd および pwd ユーティリティの動作は指定されません。


より一般的な答えのために、コマンドの出力を変数に保存する方法は、コマンドを($()または` `バックティック)で囲むことです。

var=$(command)

または

var=`command`

2つのうち、次のような$()複雑なコマンドを作成する方が簡単なので、これは好まれます。

command0 "$(command1 "$(command2 "$(command3)")")"

対応するバックティックは次のとおりです。

command0 "`command1 \"\`command2 \\\"\\\`command3\\\`\\\"\`\"`"

答え2

dir=$(pwd)

これはバックティック法よりも移植性に優れ、好ましい。

を使用すると、$()コマンドをネストできます。

たとえば、mech_pwd=$(pwd; echo in $(hostname))

答え3

環境変数を使用する$PWDか、次のように書くことができます。

dir=`pwd`

答え4

現在の作業ディレクトリの値は異なる場合があります。現在のディレクトリを取得するためにシンボリックリンクを使用すると、pwdは/usr/bin/pwdとは異なる結果を提供します。 bashを使用しているので、次を使用します。

dir=$(/usr/bin/pwd)

またはコメントに従って:

dir=$(pwd -P)

バックティックは入れ子にできないので嫌いだからです。

関連情報