私はインターネットから現在のユーザーのホームディレクトリにソフトウェアをダウンロードしてから解凍するスクリプトを作成しました。その後、一部のソフトウェアで実行する必要がありますmake
。make install
python 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
セミコロンの代わりにデュアルアンパサンドを使用すると、失敗した場合(たとえば、ディレクトリ名を誤って入力しても)&&
コマンドが実行されないという利点があります。この方法でより多くのコマンドをリンクできます。python
cd
cd /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
コマンドを使用しますpopd
。pushd /some/dir
に似ていますcd /some/dir
が、以前のディレクトリをスタックの一番上に追加します。popd
スタックの一番上に保存されているディレクトリに戻り、スタックからそのディレクトリを削除します。を使用してスタックされたディレクトリのリストを表示し、などを使用してdirs
スタック内のディレクトリに移動できますpushd -1
。pushd -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