Fish

停止魚抱怨:魚:?我不知道。________我nf我sh,請隨便?一世sn這噸噸H和和X一世噸s噸一種噸在s.一世nF一世sH,pl和一種s和在s和? is not the exit status. In fis…

  • June 23, 2020

我正在建構一個應該在 , , 中工作的腳本cshbash並且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.

有沒有一種兼容的方式可以告訴魚:請不要警告,我知道我在做什麼。

$ 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所有三個 shell 都支持的 ,並在某個環境變數中為所有三個 shell 準備好不同的程式碼,這將簡化事情。

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不能包含換行符)。

引用自:https://unix.stackexchange.com/questions/594241