如何通过shell脚本更改当前目录并在那里执行命令



我有这个脚本:

#!/bin/bash
cd ~/my-dir && bash && runall

我把这个脚本添加到我的$PATH中,当我运行这个脚本时,它首先做两件事。

  1. 它更改当前目录并执行bash,这样我的shell也可以更改当前目录,我就可以在那里工作了
  2. 在此文件夹中运行runall(另一个shell脚本(

实际结果:

脚本成功更改了我当前的shell目录。但是,不执行runall

预期结果:

脚本将我当前的shell目录更改为my-dir,然后执行runall

我该如何解决这个问题?

注:

我知道我可以做到:

cd some-dir/ && runall

但这不会将我当前的会话更改为该目录。我还想更改我当前的shell目录。

原因:

我还想更改我当前的工作目录,以便在执行runall后可以在那里运行其他手动命令。

这几乎是Bash脚本中Change the current directory的副本,答案非常相似——唯一的区别是要运行的命令的附加。

根本不要使用脚本;相反,在~/.bashrc或类似程序中,定义一个函数:

runInMyDir() {
cd ~/my-dir || return
runall
}

以定义命令CCD_ 8。(如果希望runall发生在后台,请在该行的末尾添加一个&(。


如果确实想要一个脚本,那么该脚本需要是sourced,而不是在进程外执行——当程序作为shell外部的可执行文件执行时,它在启动之前已经从原始shell中分离出来,因此它没有机会更改该shell的行为。因此,如果您使用命令cd ~/my-dir || returnrunall创建了一个名为runInMyDir的文件,则需要运行source runInMyDir而不仅仅是runInMyDir来调用它

相关内容

最新更新