结束bash脚本后保持目录更改

时间:2010-12-16 14:12:47

标签: bash shell cd

我的bash脚本:

#!/bin/bash
cd /tmp

在运行我的脚本之前:

pwd: /

运行我的脚本后:

pwd: /

运行后我的脚本通过采购:

pwd: /tmp

如何在没有采购的情况下保持脚本的路径?

6 个答案:

答案 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

中有上述内容