
서버 클러스터를 설정하기 위한 다소 긴 bash 스크립트가 있습니다. 물고기 통역사로 전환을 시작하고 싶지만 단계적으로 하고 싶습니다. 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을 사용하는 것입니다. 환경을 사용하여 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