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

How to start a new bash REPL with executing a script

我有一个脚本 foo.sh,其中包含我想在 bash REPL 中测试的一些功能,出于某种原因,我需要在新的 bash REPL 中进行测试而不是在当前 shell 中采购它,即:

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

有没有一种方法可以在一条命令中做到这一点,比如 python -i foo.pyghci foo.hs?我试过bash -i "foo.sh"bash -c "source foo.sh"bash -c "$(cat foo.sh)"等,但是好像都是直接执行脚本然后马上退出

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 但这会改变你当前的环境,我想这就是你想要避免的。

您可以使用 --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