当您在命令行中运行一个脚本(如 `./gotobin`)时,该脚本会在一个新的子 Shell 中执行。这意味着脚本中的所有命令(包括 `cd` 命令)都仅在这个子 Shell 的上下文中运行。一旦脚本执行完毕,子 Shell 就会关闭,并且您会返回到原始的交互式 Shell 会话中,该会话的工作目录保持不变。
这是因为 `cd` 是一个内建 Shell 命令,它仅改变当前 Shell 会话的工作目录。由于脚本运行在一个子 Shell 中,所以 `cd` 命令仅改变了子 Shell 的工作目录,对父 Shell(即您交互的 Shell)没有任何影响。
如果您希望在脚本执行后改变交互式 Shell 的工作目录,您有几个选项:
1. **手动运行 `cd` 命令**:
在脚本执行完毕后,手动在交互式 Shell 中运行 `cd` 命令来改变工作目录。
2. **使用 `source` 或 `.` 命令**:
使用 `source ./gotobin` 或 `. ./gotobin` 来运行脚本。这将使脚本在当前 Shell 会话中执行,而不是在新的子 Shell 中。但是,请注意,即使这样,`cd` 命令仍然只会改变脚本执行时的当前目录(即交互式 Shell 的目录),如果脚本中有其他命令或逻辑导致脚本结束后回到了其他目录,那么交互式 Shell 的目录也可能不会如您所愿。
3. **在脚本中输出需要切换的目录**:
让脚本输出需要切换到的目录,然后您手动在交互式 Shell 中运行 `cd` 命令。
4. **使用函数**:
将 `cd` 命令放在一个 Shell 函数中,并在交互式 Shell 中调用该函数。但是,由于函数也是在当前 Shell 会话中执行的,所以您需要确保函数中的逻辑正确,以便在函数执行完毕后保持您期望的工作目录。
5. **重新设计脚本**:
如果脚本的目的是改变工作目录,那么可能需要重新设计脚本的逻辑,以便它能够以某种方式通知或影响交互式 Shell。但是,由于安全性和设计上的限制,通常不建议这样做。
总之,由于 `cd` 命令的特性和 Shell 的工作方式,通常无法通过脚本直接改变交互式 Shell 的工作目录。您需要在脚本执行后手动进行必要的更改。
source的作用就是将脚本的执行结果应用到当前会话.
标签:脚本,Shell,cd,命令,与会,shell,交互式,目录 From: https://www.cnblogs.com/zxdplay/p/18490131