サーチ…


前書き

コマンドを連鎖させる手段がいくつかあります。単純なものはちょうどaのようです。またはいくつかの条件に応じて実行される論理チェーンのような複雑なものです。 3番目は配管コマンドで、出力データを効果的にチェーンの次のコマンドに渡します。

テキストパターンをカウントする

パイプを使用すると、コマンドの出力が次のコマンドの入力になります。

ls -1 | grep -c ".conf"

この場合、lsコマンドの出力はgrepコマンドの入力として使用されます。結果は、名前に ".conf"を含むファイルの数になります。

これは、必要に応じて次のコマンドのチェーンを構築するために使用できます。

ls -1 | grep ".conf" | grep -c .

rootのcmd出力をユーザーファイルに転送する

多くの場合、rootによって実行されたコマンドの結果を他のユーザーに表示する必要があります。 teeコマンドを使うと、rootとして実行しているコマンドから、ユーザーpermを含むファイルを簡単に書き込むことができます。

su -c ifconfig | tee ~/results-of-ifconfig.txt

ifconfigのみがrootとして実行されます。

&&と||でコマンドを論理的に連鎖させる

&&は 2つのコマンドをつなぎます。 2つ目は、最初のものが成功して終了する場合にのみ実行されます。 || 2つのコマンドを連鎖させる。しかし、2番目のものは、最初のものが失敗して終了する場合にのみ実行されます。

[ a = b  ] && echo "yes" || echo "no"

# if you want to run more commands within a logical chain, use curly braces
# which designate a block of commands 
# They do need a ; before closing bracket so bash can diffentiate from other uses
# of curly braces
[ a = b ] && { echo "let me see." 
               echo "hmmm, yes, i think it is true" ; } \
          || { echo "as i am in the negation i think " 
               echo "this is false. a is a not b."  ; }
# mind the use of line continuation sign \
# only needed to chain yes block with || ....

コマンドのセミコロンでの連鎖

セミコロンは2つのコマンドを区切ります。

echo "i am first" ; echo "i am second" ; echo " i am third"

|

|左のコマンドの出力を受け取り、右のコマンドを入力としてパイプします。これはサブシェルで行われることを覚えておいてください。したがって、パイプを使用して呼び出しプロセスの値を設定することはできません。

find . -type f -a -iname '*.mp3'  | \
       while read filename; do
             mute --noise "$filename"
       done 


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow