
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 fish
comando 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/bash
script?
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