スクリプト内のディレクトリを変更するために「シェルプロシージャ」または「スクリプトのインポート」は必要ありません。

スクリプト内のディレクトリを変更するために「シェルプロシージャ」または「スクリプトのインポート」は必要ありません。

私は私ができることを知っていますシェルまたはスクリプトを実行する代わりにインポート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)。

おすすめ記事