如何通过执行脚本来启动一个新的bash REPL



我有一个脚本foo.sh,我想在bash REPL中测试一些函数,由于某种原因,我需要在一个新的bash REPL中这样做,而不是在当前的shell中采购,即:

  1. 打开一个新的bash REPL
  2. 新打开的REPL中的源foo.sh

是否有这样的方法在一个命令中做到这一点,如python -i foo.pyghci foo.hs?我试过bash -i "foo.sh",bash -c "source foo.sh",bash -c "$(cat foo.sh)"等,但他们似乎只是执行脚本,然后立即退出。

您可以使用--init-file选项来做到这一点(与-i选项一起将shell标记为交互式):

bash bash --init-file foo.sh -i

注意-i必须在--init-file(和文件名)之后。

您可以使用进程替换来获取.bashrc和foo.sh的源代码:

bash --rcfile <(cat ~/.bashrc; cat foo.sh) -i
bash -c ". foo.sh && bash"

foo.sh:

export TEST=MORE

然后运行:

> bash -c ". foo.sh && bash"
> echo $SHLVL # shows how many shell levels we are down; 
2             # 2 because of the first and second `bash`
> echo $TEST
MORE          # yes, environment was sourced

PS:你可以只运行. foo.sh && bash,但这会改变你当前的环境,我想,这是你想要避免的。

最新更新