"push"を呼び出してから別のコマンドを呼び出す簡単なスクリプトがあります。しかし、スクリプトの "pushd"コマンドはスクリプトの範囲を超えていないようです。
シェル端末で実行する方法はありますか?
#!/bin/sh
pushd $1
time
私が本当に達成したいのは、電話をかけてコマンドを使用するpushd
ことです。other-command
答え1
/bin/sh
この場合、シェルスクリプトは通常、シェルプログラムの別々のインスタンスで実行されます。あなたのpushd
コマンドはサブシェルの作業ディレクトリにのみ影響します。そうしないと、シェルで実行されるすべてのプログラムがシェルの作業ディレクトリを妨げる可能性があります。
代わりに、現在のシェルでスクリプトを実行するには、次の手順を実行します。
$ . my-command somedir
またはさらに詳しく説明すると、次のようになります。
$ source my-command somedir
プログラムが他のプログラムのように動作するようにするには、エイリアスを使用できます。
$ alias mycmd='source my-command'
$ mycmd /bin
$ pwd
/bin
答え2
スクリプトは親プロセスの環境を変更できません。したがって、スクリプトで変更したすべての環境は失われます。
同じプロセスでスクリプトを実行するには、次のようにスクリプトを「インポート」できます。
. /path/to/script.sh args
答え3
特に、Pushdを使用する場合、関数はシェルスクリプトよりも適しています。
次の項目に追加してください.bashrc
。
foo() {
pushd $1
time
}
export foo
シェルから:
$ foo mydir1
出力:
~/mydir1 ~
real 0m0.000s
user 0m0.000s
sys 0m0.000s