Запускать команды в fish из сценария bash?

У меня есть довольно длинный сценарий bash для настройки кластера серверов. Я бы хотел начать переход на интерпретатор рыб, но я бы хотел сделать это поэтапно. Могу ли я оставить свой сценарий bash как есть и добавить команду fish для переключения на приглашение рыбы, а остальная часть сценария bash выполнит остальные команды из интерпретатора рыбы, даже если это #! / bin / bash сценарий?

-1
задан 6 September 2018 в 14:06
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

, тогда нет, это не работает. Это запустит интерактивный сеанс рыбы в середине сценария, и когда вы выйдете из этого процесса рыбы, bash попытается выполнить остальные команды как команды bash. Вы отчетливо увидите сообщения об ошибках синтаксиса.

Вам нужно будет выполнить fish -c 'fish commands ...' , но это может легко привести к цитированию ада. Самый безопасный способ смешивать языки в сценарии bash - использовать heredoc в кавычках. Вы можете предоставить переменные 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
0
ответ дан 5 December 2019 в 20:20

Теги

Похожие вопросы