私はディレクトリを変更せずにmake、make install、python setup installなどのコマンドを実行したいと思います。

私はディレクトリを変更せずにmake、make install、python setup installなどのコマンドを実行したいと思います。

私はインターネットから現在のユーザーのホームディレクトリにソフトウェアをダウンロードしてから解凍するスクリプトを作成しました。その後、一部のソフトウェアで実行する必要がありますmakemake installpython setup.py install

問題は、これらのすべてのコマンドを実行するために現在のディレクトリを変更したくないことです。

コマンドでパスを指定する方法はありますか?たとえば、次のようになります。

python /home/username/Desktop/urllib/setup.py install
make /home/username/Desktop/somedir/
make install /home/username/Desktop/somedir/

答え1

シェルはコマンドを結合するツールです。もちろん、cd別のディレクトリに変更するコマンドを既に知っているので、他のコマンドと一緒に束ねるための接着剤が不足しています。

実行してcd /some/dir && python foo.py別のディレクトリに変更し、コマンドを一度に実行できます。cd /some/dir; python foo.pyセミコロンの代わりにデュアルアンパサンドを使用すると、失敗した場合(たとえば、ディレクトリ名を誤って入力しても)&&コマンドが実行されないという利点があります。この方法でより多くのコマンドをリンクできます。pythoncdcd /some/dir && python foo.py && make && make install

別のディレクトリで実行するコマンドを事前に知っている場合は、あるディレクトリからcdこれらのコマンドと他のコマンドを実行できます。サブシェル:括弧内にコマンドを作成すると、既存のプロセスのすべての状態(環境、現在のディレクトリなど)を継承する別のシェルプロセスで実行されます。サブシェルが終了すると(閉じ括弧で)、サブシェル内の変更の影響を受けずに元のシェルが再開されます。

(cd /some/dir && python foo.py && make && make install)
# back in the original directory

どのコマンドを実行したいかを事前に知らない場合は、cd他のコマンドを実行して実行した後に以前のディレクトリに戻るために使用できますcd -

cd /some/dir
python foo.py
make
make install
cd -
# back in the original directory

zshをシェルとして使用しない限り、.backを使用して一度だけ返すことができますcd -。さらに戻るには、pushdコマンドを使用しますpopdpushd /some/dirに似ていますcd /some/dirが、以前のディレクトリをスタックの一番上に追加します。popdスタックの一番上に保存されているディレクトリに戻り、スタックからそのディレクトリを削除します。を使用してスタックされたディレクトリのリストを表示し、などを使用してdirsスタック内のディレクトリに移動できますpushd -1pushd -2

pushd /some/dir
python foo.py
make
make install
popd
# back in the original directory

一部のコマンドには、他のディレクトリで作業するように指示するオプションがあります。たとえばmake -C /some/dir(cd /some/dir && make)これは主に入力ショートカットまたはシェルを直接使用できない場合に便利です。通常、cdシェルでいつでも使用できます。

答え2

makeその-Cオプションが利用できるためです。または、pushdシェルコマンドを使用して適切なディレクトリに移動し、popd必要なコマンドが完了した後。

答え3

これを達成するためにサブシェルを使用できます。このように:

 $ pwd ; ( cd /tmp ; pwd ; ) ; pwd
/home/user
/tmp
/home/user

関連情報