linux - 关于 bash 脚本的说明

标签 linux bash shell

<分区>

我是 bash 脚本的新手。这对许多人来说可能是显而易见的。请耐心等待。

我有一个shell脚本如下:

#!/bin/bash
echo `pwd`
cd /home/foo/bar
echo `pwd`

假设我目前在目录:/home/foo1

如果我执行上面的脚本,它会打印:

/home/foo1
/home/foo/bar

但是一旦脚本完成执行,我看到它仍然保留在目录/home/foo1 中

我还看到一些脚本,其中有使用“cd -”命令重置工作目录的显式命令。

如果 bash 将脚本中的所有行作为命令执行,为什么它会再次重置工作目录?

最佳答案

当您运行 bash 的交互式 session 时,并从中执行脚本(例如 ./myscript.sh),然后 bash 创建一个新的 bash 进程来执行脚本。最初,该进程获得与原始进程相同的环境副本(例如当前工作目录或环境变量),但如果脚本以某种方式修改环境,则此更改只会影响新进程,而不影响原始进程。因此,当脚本退出时,您将返回到保留原始环境的原始进程。因此无法通过脚本修改原始 shell 的当前目录。

作为旁注,下面一行

echo `pwd`

没有太大意义。您要么必须执行 echo $PWD,要么只需执行 pwd

关于linux - 关于 bash 脚本的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675212/

相关文章:

c++ - Valgrind 的地 block 工具不会分析我的应用程序

python - Travis 脚本退出代码永远不会失败,即使应该失败

Bash 循环 ping 成功

linux - 如何在 debian 中启动服务?

python - 使用 subprocess.Popen() 从 bash shell 转换为 python3

regex - 使用 sed 替换第一个 ntp 服务器

linux - 进程之间的一对多通信

c - C : Execvp not finishing execution when wait is added to parent 中的 Linux Shell

c - Eclipse 中的资源链接(Linux - C)

c++ - 在 C++ 中替代 bash 同步