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