複数のコマンドのパイピング


8

次のコマンドを実行し、両方のスタウトをTextEditにパイプします。

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

これは機能せず、後者のみを実行します。

どうやって?

回答:


11

ああ、bashリダイレクト:-

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

これは、コマンドをサブシェル&&(これがラッピングするもの)で単一のbashコマンド(の効果)として実行し、サブシェル()の出力をTextEditにリダイレクトします。技術的&&には;、代わりに使用する必要はありませんが、変更の効果は、コマンドのいずれかが失敗した場合、その時点でチェーン全体を停止することです。

注:この例では、すべてのコマンドが実行されています(pmset -g; echo; pmset -g assertionsコマンドラインで実行するだけで証明できるように)、最後のパイプのみにパイプを適用しているだけです。そのため、サブシェルで実行する必要があります。

注:必要に応じて、|文字をに置き換えて>、出力をファイルに送信できます。


この小さなヒントは非常に役立ちました。組み込みコマンド/特殊文字の詳細はほとんど文書化されていません。ありがとうございました。
njboot 14

4

()はコマンドを単一のプロセスに結合し、それらを標準出力に連結します。

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.