118

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

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

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

4

5 に答える 5

269

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

(cd wherever; mycommand ...)

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

于 2012-05-12T19:04:37.153 に答える
41
(cd /path/to/your/special/place;/bin/your-special-command ARGS)
于 2012-05-12T19:04:28.950 に答える
41

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

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

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

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

于 2012-05-12T19:05:40.507 に答える
0

ちょっとした役立つ情報:

これにより、シェルディレクトリが次のように変更されます~/project

function mymake() {
    cd ~/project && make $1
}

これはしません

function mymake() (
    cd ~/project && make $1
)

走る

mymake something
于 2021-09-30T16:20:01.197 に答える