なぜ「| メイクファイルのtrueは、「||」と同じ効果があります。本当」


13

ファイルを削除する前にサービスを停止するメイクファイルがあります。サービスを停止できなかった場合、エラーで中断します。これは明らかに望ましくないので|| true、追加したいと思いましたが、見逃しました|。作ります:

stop service foo | true
rm /etc/init/foo.conf

これがなぜ機能し、何が起こっているのかについて私は混乱しています。これtrueは、単なるキーワードではなくアプリケーションであることを意味していますか?彼らは同じですか?使用する正当な理由はあります| trueか?

回答:


16

trueそして、falseしているのcoreutilsは(また、一般的にビルトインをシェル)ちょうどあなたがその動作を必要とするために起こる状況では、0と非0を返すこと。マニュアルページから:

true-何もしない、成功する
false-何もしない、失敗する

したがって、出力をstop service fooにパイピングしtrue、無視して0を返します。技術的には動作しますが、おそらく使用する必要がある|| trueので、意図が何であるかが明らかです。使用していないプログラムに出力をパイプする理由は本当にありません


4
完全に理にかなっています。:)理由はわかりませんが、「何もしないで、失敗します」と読んでいます。私を笑わせる。
キットサンデ

9
回避するもう1つの理由| trueは、コマンドがパイプバッファをいっぱいにするのに十分な出力を生成した場合、そのtrue読み取りを待機することをブロックすることです。
cjm

3
@cjmまたはSIGPIPEによる死亡
Andy

6
@Kit:ことに注意してくださいfoo || truefoo | true同じことをしないだろう。foo || trueからの出力を表示しますfoo一方で、foo | trueすべて廃棄されますfoo(とその標準出力に書き込みをfooして死ぬ可能性がありSIGPIPE、既に示されているまたはブロック)。
ジル 'SO-邪悪な停止'

この答えは、「おそらく」という言葉を除いて完璧です...!
サムワトキンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.