web-dev-qa-db-ja.com

Bashはどのようにして異なるディレクトリコンテキストでコマンドを実行できますか?

非常に特定のディレクトリ内から呼び出される一般的なコマンドがあります。このプログラムの/ binにある実行可能ファイルは1つだけであり、現在の作業ディレクトリは、それを正しく実行するために非常に重要です。スクリプトは、実行されるディレクトリ内にあるファイルに影響します。

現在、1つのディレクトリでいくつかの処理を行うカスタムシェルスクリプトもありますが、上記のコマンドを別のディレクトリにあるかのように呼び出す必要があります。

これをシェルスクリプトでどのように行いますか?

65
Marty Wallace

この目的には、cdビルトイン、またはpushdおよびpopdビルトインを使用できます。例えば:

# do something with /etc as the working directory
cd /etc
:

# do something with /tmp as the working directory
cd /tmp
:

組み込みコマンドは他のコマンドと同じように使用し、スクリプト内で何度でもディレクトリコンテキストを変更できます。

26
Todd A. Jacobs

サブシェルでcdを使用します。この種のサブシェルを使用する簡単な方法は括弧です。

(cd wherever; mycommand ...)

ただし、コマンドに必要な環境がある場合は、使用する可能性のあるものに負担をかけるのではなく、その環境自体を本当に確認する必要があります(井戸のコンテキストで非常に特定の状況で使用される内部コマンドでない限り)呼び出し元が既に必要な環境を確保する必要があるように、より大きなシステムを定義しました)。通常、これはある種のシェルスクリプトラッパーになります。

167
geekosaur
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
26
bmargulies

現在の作業ディレクトリに戻りたい場合:

current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
  1. 変数current_dirpwdと等しく設定しています
  2. その後、コマンドを実行する必要がある場所にcdに移動します
  3. その後、コマンドを実行しています
  4. 次に、cdを変数current_dirに戻します。

楽しい

15
abc123