2010-12-16 60 views

回答

11

你不能。对当前目录的更改仅影响当前进程。

2

Ignacio是正确的。然而,作为一个十恶不赦的黑客(完全不明智的,这确实应该让我至少下降10票),你可以exec的一个新的shell时,即可大功告成

 
#!/bin/bash 
... 
cd/
exec bash 
+1

您的downvotes要求你赚的给予好评 – 2010-12-16 15:29:27

+0

这将导致额外的shell中运行(您原来的最后一行)。奖励积分,如果你也可以解决这个问题。 – Sorpigal 2010-12-16 15:34:12

+0

即使您现在必须键入退出两次以关闭终端窗口,我仍然喜欢这一个。一个改进:exec bash -l(以便您的命令提示符合理) – 2013-05-08 17:56:49

5

让我详细说明这一点:

运行该脚本时,bash会为其创建一个新进程,并且对当前目录的更改只会影响该进程。

当您输入脚本时,脚本直接由您正在运行的shell执行,而不会创建额外的进程,因此当前目录的更改对主shell进程可见。

所以,伊格纳西奥指出,这不能做

0

您可以定义在当前shell中运行,以支持该功能。例如。

md() { mkdir -p "$1" && cd "$1"; } 

我上面我的〜/ .bashrc

+1

这与问题有什么关系? – mob 2010-12-16 17:28:12

+1

@mob它允许用户定义一种快速切换到特定/可变目录的方式,这可能是问题和后续搜索的目的。+1 – BroSlow 2015-09-27 08:05:21

1

如果你真的需要这种行为,可以使你的脚本返回的目录,然后用它在某种程度上。喜欢的东西:

#!/bin/bash 
cd /tmp 
echo $(pwd) 

,然后你可以

cd $(./script.sh) 

丑陋,但确实在这个简单的例子的伎俩。

+0

我同意 - 如果用户真的需要这个,并且不能通过.bashrc函数中的函数来实现,最接近的就是运行外部脚本,然后cd到任何返回的东西 - 这意味着外部脚本不能与用户有任何交互,因为你正在消耗所有的输出。这就是为什么William的答案似乎更加灵活一些。 mayEb stderr可以被使用 - 真的需要用户关于用例的更多细节 – nhed 2011-03-13 05:11:45

1

这是一个愚蠢的想法。使用PROMPT_COMMAND。例如:

 
$ export PROMPT_COMMAND='test -f $CDFILE && cd $(cat $CDFILE) && rm $CDFILE' 
$ export CDFILE=/tmp/cd.$$ 

然后,使你的脚本是“PWD> $ CDFILE”