4

この質問は cygwin 固有のものではありません。ただし、cygwin メール アーカイブhttps://cygwin.com/ml/cygwin-announce/2010-08/msg00015.htmlには、cygwin 固有の igncr shellopt 変数を設定するためのさまざまな指示があり、そのうちの 1 つが次の指示です。

4a. 影響を受ける単一のスクリプトの場合は、she-bang の直後に次の行を追加します。 ~ (set -o igncr) 2>/dev/null && set -o igncr; # コメントが必要です

set -o igncr が SHELLOPTS に igncr を設定することを理解しています。ただし、命令にサブシェルでの呼び出しも含まれている理由がわかりません。私が理解していることから、サブシェルの変数と環境は親プロセスに固執しません。それの用途は何ですか?

4

2 に答える 2

1

このコマンドで重要な詳細

(set -o igncr) 2>/dev/null && set -o igncr

コンテキストです。

非 Windows マシンと cygwin で実行するように設計されたシェル スクリプトを想像してみてください。

通常 (cygwin ではなく) の使用はset -o igncrエラーになります (他の無効なsetオプションを設定しようとする場合と同様)。

ただし、cygwin の下でsetは、意味があり、役に立ちます。

では、両方の場所で動作するスクリプトを作成するにはどうすればよいでしょうか? 現在の環境のテストが必要です。特定の環境変数、特定のパスなどを確認できます。または(これは、ブラウザー スニッフィングから機能テストへの移行に似ています)、設定しようとしているオプションが現在の環境でサポートされているかどうかを確認するだけです。

設定を試みますが、機能しない場合はエラーがスローされるため、サブシェルに設定して (エラー出力を/dev/null無視して無視します)、その設定が成功した場合 (およびその場合のみ) を&&試してください。次に、現在のシェル環境でも設定を行います。

于 2015-05-12T03:12:04.430 に答える