Fish 셸에서 실행한 다음 다음과 같이 cat
호출에 파이프하는 heredoc 문자열이 포함된 bash 스크립트가 있습니다 .source
~/foo/버즈:
1 #!/usr/bin/env bash
2
3 cat << EOS
4 function bar
5 echo 'Hello world'
6 end
7 EOS
생선 껍질에서 본 모습:
richiethomas@richie ~/foo (master) [126]> ./baz | source
richiethomas@richie ~/foo (master)> bar
Hello world
위에 표시된 대로 결과적으로 bar
함수를 실행할 때 호출할 수 있게 됩니다 ./baz | source
.
bar
그러나 함수 구현을 다음과 같이 변경하면 오류가 발생합니다.
1 #!/usr/bin/env bash
2
3 cat << EOS
4 function bar
5 set myVar 5
6 switch $myVar
7 case 4
8 echo '4'
9 case 5
10 echo '5'
11 case '*'
12 echo 'Not found'
13 end
14 end
15 EOS
이 작업을 수행 하려고 하면 source
다음 오류가 발생합니다.
richiethomas@richie ~/foo (master) [0|1]> ./baz | source
- (line 1): Missing end to balance this function definition
function bar
^
from sourcing file -
source: Error while reading file '<stdin>'
동등한 함수 + 스위치 문을 Fish 셸에 직접 붙여넣으면 정상적으로 작동합니다.
richiethomas@richie ~/foo (master) [0|1]> function bar
set myVar 5
switch $myVar
case 4
echo 'it is 4!'
case 5
echo 'it is 5!'
case '*'
echo 'not found'
end
end
richiethomas@richie ~/foo (master)> bar
it is 5!
end
파일과 셸에 복사/붙여넣은 코드에 동일한 # 문이 있으므로 잘못된 문이 붉은 청어인 것 같습니다. baz
그렇다면 실제 오류가 무엇인지 알 수 없습니다.
내 목표는 bash 스크립트의 구분 기호 문자열 내에서 fish 함수를 구성한 다음 fish 스크립트에서 해당 bash 스크립트를 가져와 함수를 호출할 수 있도록 하는 것입니다. 여기서 내가 어디서 잘못됐나요?