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