如何使用脚本将cd刻录到目录中

  • 本文关键字:cd 何使用 脚本 bash
  • 更新时间 :
  • 英文 :


例如,假设我有一个名为tmp的目录,并且我在主目录上

$pwd
/my/home/directory/
$ls
tmpdir

我有一个tmp.sh,它cd到"tmp"目录中

#!/bin/bash
cd tmp

我用运行脚本

$sh tmp.sh

运行完这个脚本后,我仍然在主目录中。

1) 我想理解为什么这没有彻底奏效(我只是大致知道这与独立于父母过程的孩子过程有关(这是对的吗?)和

2) 我该如何完成这项任务(在脚本执行完成后,最终被放在脚本cd插入的目录中)?

这是shell的工作目录。当您执行脚本时,会为您的脚本创建一个新的shell。您正在为其余代码而不是父shell更改当前的工作目录。

2) 我该如何完成这项任务(在脚本执行完成后,最终被放在脚本cd插入的目录中)?

要实现这一点,您可以&&编写脚本。因此,如果脚本成功执行,那么只有您最终作为出现在新目录中

./tmp.sh && cd <to_your_directory>

你还应该浏览unix.se的帖子-为什么cd不是一个程序?以便更好地理解。

1)运行shell脚本时,它会在shell的新实例中运行。一旦这个shell终止,您仍然处于旧的未受影响的shell版本中。那就是来自shell外部的脚本只是一段代码。

2) 没有真正好的解决方案。我会做

sh tmp.sh && cd /tmp

简单的答案是脚本在一个单独的进程中运行,在一个进程中更改当前目录不会影响其他进程。例如,设置变量也是如此(请参阅此处了解这可能导致的一些有趣的错误)。

为了使它发挥作用,您可以使用source tmp.sh来获取脚本,以运行脚本,就好像您在提示符上键入了它一样。为了更方便,您可以在~/.bashrc:中添加一个函数

foo() { 
   cd somewhere
}

或的别名

alias foo="cd somewhere"

然后,当您运行foo(从下一次登录)时,两者都将允许您在某处cd。

1)当前工作目录cwd是进程状态的一部分。当shell脚本启动时,它是一个新进程,因此它有自己的cwd。脚本shell中的任何命令都只影响该进程的cwd。

2) 如果您的脚本不能以其他方式产生输出,您可以让脚本输出所需的目录,并有一个shell函数/别名来调用脚本并更改输出位置。类似的东西

cd `script`

最新更新