
У меня есть довольно длинный скрипт 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