シェルスクリプトから Pushd を呼び出す

シェルスクリプトから Pushd を呼び出す

"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

関連情報