Bashスクリプトは[冗長]で作成されたディレクトリを変更しません。

Bashスクリプトは[冗長]で作成されたディレクトリを変更しません。

これはディレクトリを変更するスクリプトです

[user@linux ~]$ cat script.sh
echo Before: $(pwd)
cd "$1"
echo After : $(pwd)
[user@linux ~]$

pwdテストしたときに、最後のコマンドに示すように、実際にディレクトリは変更されませんでした。

手動pwdコマンド

[user@linux ~]$ pwd
/home/user
[user@linux ~]$

テスト1

[user@linux ~]$ script.sh dir01/
Before: /home/user
After : /home/user/dir01
[user@linux ~]$

テスト2

[user@linux ~]$ script.sh /home/user/dir01
Before: /home/user
After : /home/user/dir01
[user@linux ~]$

pwdその後、手動で再コマンドします。

[user@linux ~]$ pwd
/home/user
[user@linux ~]$

私のコードに問題がありますか?

答え1

スクリプトは、現在のシェル(対話型)から派生した新しい非対話型シェルから始まります。新しく作成されたシェルに対するすべての変更が反映されます。ただスクリプトのライフサイクル中。したがって、お客様の場合は、cd新しいルートが反映されます。ただ新しいシェルにいいえスクリプトが終了すると、生成されたシェルが終了するため、親シェルに反映されます。

スクリプトが実行可能な場合は、組み込みコマンドsource(in bash)またはPOSIX-ly usingコマンドを使用して、スクリプトを起動したシェルと同じシェルでスクリプトを実行できます。.しようとする

. script.sh

または、Bourne Again シェルでbash以下を使用します。source

source script.sh

関連情報