如何通过执行脚本来启动一个新的 bash REPL
How to start a new bash REPL with executing a script
我有一个脚本 foo.sh
,其中包含我想在 bash REPL 中测试的一些功能,出于某种原因,我需要在新的 bash REPL 中进行测试而不是在当前 shell 中采购它,即:
- 打开一个新的bash REPL
- 来源
foo.sh
在新开的REPL
有没有一种方法可以在一条命令中做到这一点,比如 python -i foo.py
或 ghci 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
我有一个脚本 foo.sh
,其中包含我想在 bash REPL 中测试的一些功能,出于某种原因,我需要在新的 bash REPL 中进行测试而不是在当前 shell 中采购它,即:
- 打开一个新的bash REPL
- 来源
foo.sh
在新开的REPL
有没有一种方法可以在一条命令中做到这一点,比如 python -i foo.py
或 ghci 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