这是我更改目录的脚本
[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