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

您的脚本将在一个新的非交互式 shell 中启动,该 shell 是从当前 shell(交互式)派生的。对新生成的 shell 所做的任何更改都会得到反映仅有的在脚本的生命周期内。所以在你的情况下,cd反映了新路径仅有的在新的 shell 中,将会不是被反射回父 shell,因为当脚本终止时生成的 shell 就会退出。

当脚本可执行时,您可以使用内置命令source(在 中bash)或 POSIX-ly using命令在与启动脚本的 shell 相同的 shell 中运行脚本。.尝试做

. script.sh

或者在 bourne Again shell 中bash,使用source

source script.sh

相关内容