如何使 shell 脚本所做的更改永久生效?

How can I make the changes done by a shell script permanent?

如何使 shell 脚本所做的更改成为永久性的,即使脚本终止时也是如此?

例如:script.sh

#!/bin/sh
cd dir2
pwd

使用这个脚本:

cd dir1
script.sh
pwd

我得到:

dir2
dir1

如何在脚本终止后留在目录 2 中?

script.sh在子进程中执行("subshell"),在子进程中改变工作目录不会影响父进程的工作目录。

要用类似于 "a script" 的内容更改目录,您至少有 3 种可能性:

  • 设置别名;适合与 shell 进行互动工作;据我了解,不是你的情况;
  • 写一个 shell 函数而不是 script.sh,看一个例子 here
  • 运行 script.sh 在当前进程中使用 source 或简单地 .

最后一个示例:

source script.sh

. script.sh

有关 source 命令的更多信息 here

还有另一种非常奇怪的可能性,请参见此处:change working directory of caller。不过,不要太认真,对程序员来说就像一个非常令人讨厌的笑话。