非常に特定のディレクトリ内から呼び出される一般的なコマンドがあります。このプログラムの/ binにある実行可能ファイルは1つだけであり、現在の作業ディレクトリは、それを正しく実行するために非常に重要です。スクリプトは、実行されるディレクトリ内にあるファイルに影響します。
現在、1つのディレクトリでいくつかの処理を行うカスタムシェルスクリプトもありますが、上記のコマンドを別のディレクトリにあるかのように呼び出す必要があります。
これをシェルスクリプトでどのように行いますか?
この目的には、cd
ビルトイン、またはpushd
およびpopd
ビルトインを使用できます。例えば:
# do something with /etc as the working directory
cd /etc
:
# do something with /tmp as the working directory
cd /tmp
:
組み込みコマンドは他のコマンドと同じように使用し、スクリプト内で何度でもディレクトリコンテキストを変更できます。
サブシェルでcd
を使用します。この種のサブシェルを使用する簡単な方法は括弧です。
(cd wherever; mycommand ...)
ただし、コマンドに必要な環境がある場合は、使用する可能性のあるものに負担をかけるのではなく、その環境自体を本当に確認する必要があります(井戸のコンテキストで非常に特定の状況で使用される内部コマンドでない限り)呼び出し元が既に必要な環境を確保する必要があるように、より大きなシステムを定義しました)。通常、これはある種のシェルスクリプトラッパーになります。
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
をpwd
と等しく設定していますcd
に移動しますcd
を変数current_dir
に戻します。楽しい