尽管进行了采购,仍无法从bash脚本更改目录

我有以下2个文件:

文件cd2vcaa(在路径中):

#! /bin/bash
cd /var/cache/apt/archives

文件test.sh(在当前目录中):

#! /bin/bash
. cd2vcaa

在终端上,我可以使用. cd2vcaa来更改目录,而不能使用./test.sh来更改目录

~$ cd2vcaa                        <-- no effect
~$ . cd2vcaa                      <-- changes directory
/var/cache/apt/archives$ cd       <-- back to home directory
~$ ./test.sh                      <-- does not change directory though no error - why?
~$

为什么. cd2vcaa是在终端上运行但在另一个脚本内运行? 这个问题怎么解决?

iCMS 回答:尽管进行了采购,仍无法从bash脚本更改目录

当您使用test.sh调用./test.sh时,test.sh在单独的外壳中运行,因此尽管cd中的源代码意味着test.sh命令将影响当前的目录test.sh运行所在的外壳程序,因此,例如,在/var/cache/apt/archives末尾添加的任何命令都将在当前目录test.sh下运行,它不会影响父外壳程序(您的登录会话)。

如果您通过采购. test.sh来调用cd,则在任一阶段都不会启动任何子Shell,并且在登录会话中会更改目录。

如评论中所讨论的,如果目标只是使用bash编入指定目录的交互式外壳程序(不一定是父外壳程序),那么一个选择就是放置{ test.sh末尾的{1}},以便在运行cd命令之后启动交互式子shell。从该子外壳程序退出后,控件将返回到登录外壳程序,仍位于其原始工作目录中。

本文链接:https://www.f2er.com/2186535.html

大家都在问