我的 bash 脚本:
#!/bin/bash
cd /tmp
在运行我的脚本之前:
pwd: /
运行我的脚本后:
pwd: /
在通过采购它运行我的脚本之后:
pwd: /tmp
我如何在不采购脚本的情况下保持脚本的路径?
你不能。对当前目录的更改只会影响当前进程。
让我详细说明一下:
运行脚本时,bash 会为其创建一个新进程,对当前目录的更改只会影响该进程。
当您获取脚本时,脚本由您正在运行的 shell 直接执行,无需创建额外的进程,因此对当前目录的更改对您的主 shell 进程可见。
因此,正如 Ignacio 指出的那样,这是无法做到的
伊格纳西奥是正确的。然而,作为一个令人发指的黑客(完全不明智的建议,这真的应该让我至少 10 票反对)你可以在完成后执行一个新的 shell
#!/bin/bash ... 光盘 / 执行 bash
这是一个愚蠢的想法。使用 PROMPT_COMMAND。例如:
$ export PROMPT_COMMAND='test -f $CDFILE && cd $(cat $CDFILE) && rm $CDFILE' $ 导出 CDFILE=/tmp/cd.$$
然后,将脚本的最后一行设为 'pwd > $CDFILE'
如果你真的需要这种行为,你可以让你的脚本返回目录,然后以某种方式使用它。就像是:
#!/bin/bash
cd /tmp
echo $(pwd)
然后你可以
cd $(./script.sh)
丑陋,但在这个简单的情况下可以解决问题。
您可以定义一个在当前 shell 中运行的函数来支持这一点。例如
md() { mkdir -p "$1" && cd "$1"; }
我的 ~/.bashrc 中有以上内容