パイプ出力をオンまたはオフにすることができるawk/sed/perl/python以外の基本的なLinuxコマンドはありますか?

パイプ出力をオンまたはオフにすることができるawk/sed/perl/python以外の基本的なLinuxコマンドはありますか?

たとえば、変数を定義するとします。

DROP=

ループがあります。

# highly compatible, streaming, 
# line-wise parser for embedded device
# no awk or external dependency
while IFS= read -r line; do 

  ...
  generate_output_1 | xargs echo
  ...
  generate_output_2 | xargs echo
  ...
  generate_output_N | xargs echo 

done <<<$(cleanFile x.txt) > "$OUTPUT_STREAM"

出力転送機能をどのように切り替えますか?関数定義を考えることができますが、出力をオフまたはオンにするコマンドはありますか?

# e.g. 
DROP=-d
generate_output | spigot ${DROP}

これらのコメントを解決するために、質問をする前にifステートメントを使用しました。ストリーミングパーサーに精通している人は、可能であればif文を避けることが重要です。なぜなら、whileループの本文にすでにif文が必要な場合が多いからです。したがって、私は制御式(例えば[ .. ] && ... || ...)を含むif文の解決を避けるために多くの努力をします。

第二に、変数を定義しようとしていますPIPE

if [ -z "$DROP" ]; then 
  PIPE=/dev/stdout
else
  PIPE=/dev/null
fi

代わりに追加し... | xargs echoてください。実際、私のBASHバージョンと仮想化環境のwhileループでは機能しません。これは、私がwhileループの出力を管理するためにこの手法を使用したからです。この手法は、例の最後の行ですでに使用されています。では、OUTPUT_STREAMパラメータまたはデフォルト値に基づいてファイルを交換します/dev/stdout

done <<<$(cleanFile x.txt) > "$OUTPUT_STREAM"

私が本当に望むのは、タスクを実行するための簡潔なコマンドですspigot。それはすべてです。

ベストアンサー1

いいえ、ありません。あなたの要件をよく理解すれば、そのようなコマンドを作成するのは簡単です。たとえば、

#include <stdio.h>
#include<signal.h>
#include<unistd.h>

int flag;

void sig_handler(int signum){
        if (flag==1){flag=0;}
        else { flag=1;}

}

void main (){
        int c;
        flag=1;
        signal(SIGHUP,sig_handler);
        while ((c=getchar())!=EOF){
                if (flag==1) {
                        putchar (c);
                }
        }
}

私のCは少し錆びて、最新のコーディング標準に合わないかもしれませんが、HUPが実行されると出力がオフになり、点灯します。

おすすめ記事