Запускать команды в fish из скрипта bash?
У меня довольно длинный bash-скрипт для настройки кластера серверов. Я хотел бы начать переходить на переводчика рыбы, но я хотел бы сделать это поэтапно. Могу ли я сохранить мой 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 в кавычках. Вы можете выставить переменные 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