非常に特定のディレクトリ内から呼び出される一般的なコマンドがあります。このプログラムの/ binにある実行可能ファイルは1つだけであり、現在の作業ディレクトリはそれを正しく実行するために非常に重要です。スクリプトは、スクリプトが実行されているディレクトリ内にあるファイルに影響します。
今、私は1つのディレクトリでいくつかのことを行うカスタムシェルスクリプトも持っていますが、別のディレクトリにあるかのように上記のコマンドを呼び出す必要があります。
シェルスクリプトでこれをどのように行いますか?
非常に特定のディレクトリ内から呼び出される一般的なコマンドがあります。このプログラムの/ 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 -前のディレクトリに戻すためのPOSIXシェルもあります。それは、言った()pushdとpopd実際に対話的な使用のために意図されており、(b)は、それはあなたができると仮定することは常に安全ではありませんcdあなたが始めたところ、バック特に(内部的に制限された権限を使用することができ、複雑なサブシステムに表示stackoverflow.com/questions/を10555284 /…)。
popd。
:ここで記号の意味を説明していただけますか?
man bash読み取りの関連セクション: : [arguments]影響なし。このコマンドは、引数を展開し、指定されたリダイレクトを実行する以外に何もしません。戻りステータスはゼロです。
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@apieceofbartによる別の解決策
pushd && YOUR COMMAND && popd
pushd && YOUR COMMAND && pulld
popd代わりに意味したと思いますpulld。