我是bash脚本新手。对许多人来说这可能是显而易见请耐心等待。
我有一个shell脚本如下:
#!/bin/bash
echo `pwd`
cd /home/foo/bar
echo `pwd`
假设我目前在dir:/ home / foo1
如果我执行上面的脚本,则打印:
/home/foo1
/home/foo/bar
但是一旦脚本完成执行,我已经看到它仍然保留在dir / home / foo1
我还看到一些脚本,其中有明确的命令使用'cd - '命令重置工作目录。
如果bash执行脚本中的所有行作为命令,为什么它会再次重置工作目录?
答案 0 :(得分:1)
当您运行bash的交互式会话时,从中执行脚本(例如./myscript.sh
),然后bash创建一个新的bash进程来执行脚本。最初,该进程获得与原始进程相同的环境的副本(例如当前工作目录或环境变量),但如果脚本以某种方式修改环境,则此更改仅影响新进程,而不影响原始进程。因此,当脚本退出时,您将返回保留原始环境的原始进程。因此无法从脚本中修改原始shell的当前目录。
作为旁注,以下一行
echo `pwd`
没有多大意义。您要么必须echo $PWD
,要么只需pwd
。