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