魚の文句をやめなさい:魚:$?終了状態ではありません。魚では$statusを使用してください。

魚の文句をやめなさい:魚:$?終了状態ではありません。魚では$statusを使用してください。

何も変更せずに、cshで実行する必要があるスクリプトを書いています。bashfish

これはすべてのシェルで正しい操作を行います。

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`]

`fishBourneなどのシェルが追加のレベルのバックスラッシュ処理を実行するという事実を活用するための特別なことはありません`...`

evalさらに、3つのシェルすべてでサポートされているものを使用できる必要があり、一部の環境変数で3つのシェルすべてに対して異なるコードを準備する必要があるため、操作が簡素化されます。

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列を立てて魚を通過し(他の殻と同様に)、魚が魚に近づくようにします。

関連情報