我有一个相当长的用于设置服务器集群的 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