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

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

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

#!/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

Связанный контент