通过 bash 脚本在 fish 中运行命令?

通过 bash 脚本在 fish 中运行命令?

我有一个相当长的用于​​设置服务器集群的 bash 脚本。我想开始切换到 fish 解释器,但我想分步进行。我可以保留我的 bash 脚本并添加fish切换到 fish 提示符的命令吗?即使它是一个脚本,bash 脚本的其余部分也会执行 fish 解释器中的其余命令#!/bin/bash吗?

答案1

如果您认为您可以这样做:

#!/bin/bash
echo this part is bash commands
for num in {1..10}; do echo $(( num*num )); done
fish
echo this part is fish commands
for num in (seq 10); math $num \* $num; end

那么不,它不是那样工作的。这将在脚本中间启动一个交互式 fish 会话,当您退出该 fish 进程时,bash 会尝试将其余命令作为 bash 命令执行。您会清楚地看到语法错误消息。

您必须这样做fish -c 'fish commands ...',但这很容易导致引用地狱。在 bash 脚本中混合语言的最安全方法是使用带引号的 heredoc。您可以使用环境为 fish 部分公开 bash 变量。

#!/bin/bash
echo this part is bash commands
for num in {1..10}; do echo $(( num*num )); done
export foo=bar
fish <<'END_FISH'
    echo this part is fish commands
    for num in (seq 10); math $num \* $num; end
    echo the bash variable foo has value $foo
END_FISH

相关内容