現在の作業ディレクトリのパスを解析するシェル スクリプトを作成しています (現在のディレクトリの上のすべてのベース名のようなものを出力します)。
PWD
これまでは環境変数を使ってパスを解析してきましたが、
- 私は
PWD
常に設定されていると期待できます - すべてのプラットフォームで同じ結果を得る
pwd
shell-builtinを使用する方が良いでしょうか? できるだけ多くのプラットフォームでこのスクリプトを実行する必要があるので、ちょっと考えてみました...
現在の作業ディレクトリのパスを解析するシェル スクリプトを作成しています (現在のディレクトリの上のすべてのベース名のようなものを出力します)。
PWD
これまでは環境変数を使ってパスを解析してきましたが、
PWD
常に設定されていると期待できますpwd
shell-builtinを使用する方が良いでしょうか? できるだけ多くのプラットフォームでこのスクリプトを実行する必要があるので、ちょっと考えてみました...
POSIX$PWD
では、次のように設定する必要があります。
PWD
この変数は、現在の作業ディレクトリの絶対パス名を表します。ドットまたはドットドットのコンポーネントを含んではなりません。この値は、cd ユーティリティによって設定され、初期化中に sh ユーティリティによって設定されます。
したがって、設定されていることに依存できますが、絶対パスではなく、 「...絶対パス...」に注意してください。
bash
(少なくとも最近のバージョン)は、設定$PWD
(およびpwd
組み込み)時にたどったシンボリックリンクを記憶します。command pwd
(つまり、外部コマンド) はしません。したがって、そこではさまざまな結果が得られますが、それはあなたにとって重要である場合とそうでない場合があります。pwd -P
シンボリック リンクのないパスが必要な場合に使用します。
pwd
ドキュメントには次のように記載されていることに注意してください。
アプリケーションが PWD の値を設定または設定解除した場合、pwd の動作は規定されていません。
だから、それをしないでください:)
要するに、ここに勝者はいません。環境変数は POSIX シェルにあり、外部コマンドや組み込みコマンドも同様です。必要に応じて最適なものを選択してください。重要なことは、シンボリックリンクを気にするかどうかです。
この点に関して、AIX 4.2.1、AIX 6、Sparc Solaris 10、および Redhat 5 エンタープライズを比較したフォーラム記事「$PWD vs `pwd`」から:
$PWD と組み込みの pwd に違いはありません。
組み込みの pwd -P と /usr/bin/pwd に違いはありません。
前者は作業ディレクトリをシンボリック リンクの名前で表示し、後者は実際のパスを表示します。
唯一の相違点は、外部コマンドがほとんどのシステムでは /usr/bin にあり、Redhat では /bin にあることです。
bash が利用可能であり、それを使用してスクリプトが実行されることがわかっている場合PWD
は安全です。
一部のシステムでプレーンな sh しか利用できない場合は、を使用しますpwd
。
私だったら、pwd
bash と sh の両方に組み込まれているので使用します。これは、すべての点で同じように機能するという意味ではありませんが、オプションなしで呼び出す場合は問題ありません。