私は私ができることを知っていますシェルまたはスクリプトを実行する代わりにインポートcd
私が使用するシェルに。私が知りたいのはそこにあります。どの「親シェル」に移動しますcd
(正しいフレーズかどうかわからない)。
#!/bin/sh
# This is script.sh
cd $1
pwd
以下はいくつかの結果です。 (メモ:正確な出力ではなく、不要な部分を除去して短くしました。私がシェルに入力した行は>
。 )
> mkdir foo
> ./script.sh foo
/home/myName/foo
> pwd
/home/myName
私が理解している限り、これは予想される動作です。これが私がスクリプトを「得る」ときに起こるものです。
> . ./script.sh foo
/home/myName/foo
> pwd
/home/myName/foo
スクリプトをインポートしてシェルプロシージャにすることなく、ディレクトリ./script.sh foo
に使用されるシェルに結果を入力する方法はありますか/home/myName/foo
?
ベストアンサー1
いいえ。スクリプトを として呼び出すと、./script.sh foo
スクリプトを実行するサブシェルが起動するためです。サブシェルが終了すると、スクリプトを起動したディレクトリに戻ります。ただし、次のようなスクリプトを使用してこの動作を偽にすることはできます。
#!/bin/bash
cd $1
bash
ディレクトリを変更したら、サブシェルに移動してから元のexit
シェルに戻る必要があります。
最後の行に変更する場合:
exec bash
新しいシェルは古いシェルを置き換えるため、新しいシェルを終了する必要はありません。しかし、これはまだ醜いハッキングです(IMHO)。