プロセスが返す値を無効にする、シンプルだがクロスプラットフォームのnegate-processを探しています。 0を何らかの値!= 0および任意の値!= 0から0にマッピングする必要があります。つまり、次のコマンドは「yes、nonexistingpath does not exist」を返します。
ls nonexistingpath | negate && echo "yes, nonexistingpath doesn't exist."
! -演算子は素晴らしいですが、残念ながらシェルに依存しません。
Bashでは、!コマンドの前の演算子。例えば:
! ls nonexistingpath && echo "yes, nonexistingpath doesn't exist"
あなたが試すことができます:
ls nonexistingpath || echo "yes, nonexistingpath doesn't exist."
あるいは単に:
! ls nonexistingpath
何らかの理由でシェルとしてBashがない場合(例:gitスクリプト、またはpuppet execテスト)、次を実行できます。
echo '! ls notexisting' | bash
-> retcode:0
echo '! ls /' | bash
-> retcode:1
! ls nonexistingpath && echo "yes, nonexistingpath doesn't exist."
または
ls nonexistingpath || echo "yes, nonexistingpath doesn't exist."
注:ときどき!(command || other command)
が表示されます。
ここでは! ls nonexistingpath && echo "yes, nonexistingpath doesn't exist."
で十分です。
サブシェルは不要です。
Git 2.22(Q2 2019)は、次のような優れた形式を示しています。
コミット74ec8cf 、 commit 3fae7ad 、 commit 0e67c32 、 commit 07353d9 、 commit 3bc2702 、 コミット8c3b9f7 、 コミット80a539a 、 コミットc5c39f4 (2019年3月13日)作成 SZEDERGábor(szeder
) 。
を参照 commit 99e37c2 、 commit 9f82b2a 、 commit 900721e (2019年3月13日)by Johannes Schindelin(dscho
) 。
( 浜野潤夫-gitster
- in commit 579b75a 、2019年4月25日)
t9811-git-p4-label-import
:パイプラインの否定を修正'
t9811-git-p4-label-import.sh
'では、テスト 'tag that cannot be exported
'が実行されます。!(p4 labels | grep GIT_TAG_ON_A_BRANCH)
指定された文字列が '
p4 labels
'で出力されないことを確認します。
これは問題があります。 [〜#〜] posix [〜#〜] :「パイプラインが予約語
!
で始まり、command1
がサブシェルコマンドである場合、アプリケーションは、(
の先頭のcommand1
演算子が!
1つ以上の<blank>
文字。
予約語!
の直後に(
演算子が続く動作は指定されていません。 "ほとんどの一般的なシェルはまだこの「
!
」を「パイプラインの最後のコマンドの終了コードを無効にする」と解釈しますが、「mksh/lksh
」は代わりに負のファイル名パターンとして解釈しません。
その結果、彼らは現在のディレクトリ( 'main
'と呼ばれる単一のディレクトリを含む)のパス名で構成されるコマンドを実行しようとしますが、もちろんテストに失敗します。'
!
'と '(
'の間にスペースを追加するだけで修正できますが、代わりに不要なサブシェルを削除して修正します。特に、 Commit 74ec8cf