我使用fish shell,并希望能够“获取”一些用sh兼容语法编写的shell脚本,而fish无法读取这些脚本。例如,许多软件希望您提供一些 shell 脚本来导出有用的环境变量:
# customvars.sh
FOOBAR=qwerty
export FOOBAR
Run Code Online (Sandbox Code Playgroud)
如果我不关心保留局部变量和函数定义,一种解决方法是使用 exec 用 /bin/sh 替换当前进程,然后返回到fish
# We start out on fish
exec /bin/sh
Run Code Online (Sandbox Code Playgroud)
# Running a POSIX shell now
. customvars.sh
exec /usr/bin/fish
Run Code Online (Sandbox Code Playgroud)
# Back on fish
echo $FOOBAR
Run Code Online (Sandbox Code Playgroud)
有没有办法将这种模式归结为一个单行代码,我可以将其保存在某个函数中?如果我尝试做
exec /bin/sh -c '. vars.sh; /usr/bin/fish'
Run Code Online (Sandbox Code Playgroud)
我的终端模拟器窗口立即关闭,而不是带我回到交互式鱼提示。