新しいcygwin .bashrcインタラクティブチェックが機能しないのはなぜですか?

新しいcygwin .bashrcインタラクティブチェックが機能しないのはなぜですか?

私はCygwinを更新しましたが、新しいバージョンの.bashrc上部に次の行が含まれています。

echo "BEFORE TEST"
# If not running interactively, don't do anything
[[ "$-" != *i* ]] && return
echo "AFTER TEST"

インタラクティブに実行しない限り、何もする必要はないことを知っていますが、次のsshコマンドを使用するかどうかについて質問があります。

ssh localhost pwd

私はこれを見る:

BEFORE TEST

したがって、明らかに[[ "$-" != *i* ]]テストに失敗して返されます。明らかにssh localhost pwdこれは簡単な例ですが、.bashrcコマンドを実行すると常に実行できるようにしたいですssh。私の実際の自動化はこのcygwinインスタンスに対してリモートでコマンドを実行しますが、パス.bashrc(myで設定)が正しく設定されていないため失敗します。

また、このテストが実際に何をしているのかを説明できる人はいますか?何ですかi$-それはどういう意味ですか?

ベストアンサー1

pwd(あなたの場合)で単一のコマンドを実行すると、インタラクティブシェルではsshなく、動作が正しいと思います。

inではなくinPATHまたはに設定する必要があります。~/.profile~/.bash_profile~/.bashrc

見つかったとおりbash(1)マニュアルページ:

   パラメータ
      (...)
      特殊パラメータ
          シェルはいくつかのパラメータを特別に扱います。これらのパラメータは
          情報提供のみを目的として割り当てることはできません。
          (...)
          - 呼び出し時に指定された現在のオプションフラグに展開されます。
                 set 組み込みコマンドまたはシェル経由
                 (例:-iオプション)

したがって、iインクルードはオプションが使用されたことを$-意味します-i(または対話的にシェルによって自動的に設定されます)。

おすすめ記事