아무런 변경 없이 , , csh
에서 실행되어야 하는 스크립트를 작성 중입니다 .bash
fish
이는 모든 쉘에서 올바른 작업을 수행합니다.
perl -e '$bash=shift;$csh=shift;for(@ARGV){unlink;rmdir;}if($bash=~s/h//){exit$bash;}exit$csh;' "$?h" "$status" $PARALLEL_TMP
불평 에 더해 fish
:
fish: $? is not the exit status. In fish, please use $status.
물고기에게 알릴 수 있는 호환 가능한 방법이 있나요? 경고하지 마세요. 저는 제가 무엇을 하는지 알고 있습니다.
답변1
$ bash -c 'false; echo "[$status]" "[`echo \$?h`]"'
[] [1h]
$ csh -c 'false; echo "[$status]" "[`echo \$?h`]"'
[1] [0]
$ fish -c 'false; echo "[$status]" "[`echo \$?h`]"'
[1] [`echo $?h`]
`
fish
Bourne과 같은 쉘이 추가 수준의 백슬래시 처리를 수행한다는 사실을 활용하는 데 특별한 것은 없습니다 `...`
.
eval
또한 세 가지 쉘 모두에서 지원되는 것을 사용할 수 있어야 하며 일부 환경 변수에서 세 가지 쉘 모두에 대해 서로 다른 코드를 준비해야 하므로 작업이 단순화됩니다.
if ($csh || $fish) {
ENV{CHECK_STATUS} = q{perl -e '...' $status};
} else {
ENV{CHECK_STATUS} = q{perl -e '...' "$?"};
}
exec $shell, "-c", ...;
쉘 코드는 다음과 같습니다 eval "$CHECK_STATUS"
(for에는 개행 문자가 포함되어서는 안 csh
됩니다 $CHECK_STATUS
).
답변2
물고기에게 알릴 수 있는 호환 가능한 방법이 있나요? 경고하지 마세요. 저는 제가 무엇을 하는지 알고 있습니다.
그렇지 않았습니다. Fish와 다른 쉘 간의 상호 호환 스크립트는 다음과 같습니다.한 가지도 아니고, 왜냐하면 물고기는호환되지 않음.
대부분의 경우 여러분이 원하는 것은 쉘을 선택하고 그에 대한 스크립트를 작성하는 것입니다. 가장 널리 사용 가능한 선택은 "/bin/sh"입니다.
그러면 Fish는 Python이나 Ruby로 작성된 스크립트나 C로 작성된 프로그램처럼 스크립트를 실행할 수 있습니다.
source
어떤 경우에는 쉘의 환경 변경 사항에 영향을 주기 위해 스크립트에 쉘이 필요합니다 . 이 경우 가장 쉬운 방법은 스크립트를 인쇄하는 것입니다.
export var=val
/path/to/script | source
줄을 서서 물고기가 통과하여(다른 껍질과 유사하게) 물고기가 물고기에게 다가가도록 합니다.