Executar comandos em fish a partir do script bash?

Executar comandos em fish a partir do script bash?

Eu tenho um script bash bastante longo para configurar um cluster de servidores. Gostaria de começar a mudar para o intérprete de peixes, mas gostaria de fazer isso em etapas. Posso manter meu script bash como está e adicionar o fishcomando para alternar para o prompt fish e o restante do script bash executará o restante dos comandos do intérprete fish, mesmo que seja um #!/bin/bashscript?

Responder1

Se você está pensando que pode fazer isso:

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

então não, não funciona assim. Isso iniciaria uma sessão fish interativa no meio do script e, quando você saísse desse processo fish, o bash tentaria executar o restante dos comandos como comandos bash. Você veria claramente mensagens de erro de sintaxe.

Você teria que fazer isso fish -c 'fish commands ...', mas isso pode facilmente levar a citar o inferno. A maneira mais segura de misturar idiomas em um script bash é usar um heredoc citado. Você pode expor variáveis ​​bash para a parte fish usando o ambiente.

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

informação relacionada