1

tcsh起動スクリプトに次のコードがあります。

set _color_count = `sh -c "tput -T${TERM}-256color colors 2>/dev/null"`
if ($? == 0) then  # check if it was a valid terminal type
    if ($_color_count != 256) then  # sanity-check
        echo "Warning: Color count '$_color_count' for '${TERM}-256color' is not 256"
    endif
    setenv TERM "${TERM}-256color"
endif

私の問題は、コマンドが無効な端末タイプのためにゼロ以外の終了ステータスを返した場合でも、終了ステータス($?)が常にゼロになることです。tputコマンドの出力をキャプチャしない場合、終了ステータスの確認は正常に機能します。

sh -c "tput -T${TERM}-256color colors 2>/dev/null"

tputコマンドがバッククォートである場合に、コマンドがゼロ以外の終了ステータスを返したかどうかを判断するにはどうすればよいですか?

4

1 に答える 1

3

これは、tcshバージョン6.17.05で導入された動作の変更であることが判明しました(元のバグレポートを参照)。tcshバージョン6.18.00(リグレッションバグレポートを参照)の時点で元に戻されるように見えますが、明らかに実際に使用されています。

ただし、影響を受けるバージョンでは、コマンドをバッククォートで実行する前に、変数$anyerrorを設定できます。

set anyerror
set _color_count = `sh -c "tput -T${TERM}-256color colors 2>/dev/null"`

特別なシェル変数のステータスに関する私のtcshのマニュアルページによると:

status 変数anyerrorが設定されていない限り、最後のコマンドによって返されるステータス。パイプラインまたはバッククォート展開のエラーは伝播されます(これはデフォルトのcsh動作でした)。

于 2012-07-10T10:26:42.247 に答える