¿Ejecutar comandos en fish desde el script bash?

¿Ejecutar comandos en fish desde el script bash?

Tengo un script bash bastante largo para configurar un clúster de servidores. Me gustaría empezar a cambiar al intérprete de peces, pero me gustaría hacerlo por pasos. ¿Puedo mantener mi script bash como está y agregar el fishcomando para cambiar al indicador de pescado y el resto del script bash ejecutará el resto de los comandos del intérprete de fish, aunque sea un #!/bin/bashscript?

Respuesta1

Si estás pensando que podrías hacer esto:

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

entonces no, no funciona así. Eso iniciaría una sesión interactiva de fish en medio del script, y cuando salga de ese proceso de fish, bash intentaría ejecutar el resto de los comandos como comandos de bash. Verás claramente mensajes de error de sintaxis.

Tendrías que hacerlo fish -c 'fish commands ...', pero eso puede llevar fácilmente a citar el infierno. La forma más segura de mezclar idiomas en un script bash es utilizar un documento heredoc citado. Puede exponer variables de bash para la parte del pez utilizando el entorno.

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

información relacionada