我有一个脚本foo.sh
,我想在bash REPL中测试一些函数,由于某种原因,我需要在一个新的bash REPL中这样做,而不是在当前的shell中采购,即:
- 打开一个新的bash REPL
- 新打开的REPL中的源
foo.sh
是否有这样的方法在一个命令中做到这一点,如python -i foo.py
或ghci 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
,但这会改变你当前的环境,我想,这是你想要避免的。