我有这个脚本:
#!/bin/bash
cd ~/my-dir && bash && runall
我把这个脚本添加到我的$PATH
中,当我运行这个脚本时,它首先做两件事。
- 它更改当前目录并执行bash,这样我的shell也可以更改当前目录,我就可以在那里工作了
- 在此文件夹中运行
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
发生在后台,请在该行的末尾添加一个&
(。
如果确实想要一个脚本,那么该脚本需要是source
d,而不是在进程外执行——当程序作为shell外部的可执行文件执行时,它在启动之前已经从原始shell中分离出来,因此它没有机会更改该shell的行为。因此,如果您使用命令cd ~/my-dir || return
和runall
创建了一个名为runInMyDir
的文件,则需要运行source runInMyDir
而不仅仅是runInMyDir
来调用它