bash 스크립트에서 fish로 명령을 실행하시겠습니까?

bash 스크립트에서 fish로 명령을 실행하시겠습니까?

서버 클러스터를 설정하기 위한 다소 긴 bash 스크립트가 있습니다. 물고기 통역사로 전환을 시작하고 싶지만 단계적으로 하고 싶습니다. Bash 스크립트를 그대로 유지하고 fishfish 프롬프트로 전환하는 명령을 추가하면 나머지 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을 사용하는 것입니다. 환경을 사용하여 fish 부분에 대한 bash 변수를 노출할 수 있습니다.

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

관련 정보