タグ付けされた質問 「pipe」

Unixパイプは、2つのプロセスのファイル記述子を接続します。パイプは、<unistd.h>で宣言されたPOSIX pipe()関数で作成されます。シェルは、「|」を使用してプロセス間にパイプを作成します。

3
パイプと標準出力への直接出力
コマンドの出力をパイプしてstdoutに送る方法があるかどうか疑問に思っていました。したがって、たとえば、fortuneフォーチュンクッキーを出力し、クリップボードにコピーします。 $ fortune | tee &gt;(?stdout?) | pbcopy "...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and the Ugly)." (By Matt Welsh)
14 bash  pipe  stdout  tee 

5
パイプ内に別のtarファイルを作成して、tarファイルの内容をフィルター処理するにはどうすればよいですか?
許可、mtimesなど、保持したいさまざまな属性を持ついくつかのディレクトリを含む外部システムからの単一のtarファイルを考えます。これらのファイルのサブセットを通常のユーザー(rootではない)として簡単に取得するにはどうすればよいですか? 次のようなものを探しています: tar -f some.tar.gz --subset subdir/ | ssh remote@system tar xvz また、このtarアーカイブの主な属性(所有権、グループ、モード、mtime)を保持することも重要です。拡張ヘッダーキーワードなどのtarファイルの他の属性はどうですか? このサブディレクトリに巨大なファイルが含まれる場合に、一時ディレクトリの使用を回避するソリューションのボーナスポイント。
13 pipe  tar 

4
sedを使用して連続ストリーミング出力を操作する方法は?
私は技術に詳しくない聴衆のためにプレゼンテーションをまとめています。値の連続ストリームを出力するbashで実行しているプログラムがありますが、そのうちのいくつかは重要です。重要な結果が表示されるときに強調表示して、聴衆がその頻度を把握できるようにします。問題はsed、実行中のストリームを操作できないことです。次のように結果をファイルに入れるとうまくいきます: cat output.txt | sed "s/some text/some text bolded/" しかし、次のように実行中の出力で同じことをしようとすると: command | sed "s/some text/some text bolded/" sed何もしません。何かご意見は? ランバートは指摘するのに十分役に立ちましたので、私の言ったことsedは何も曖昧ではありませんでした。何が起こっstdoutているのかstderrは、たとえそれがパイプスルーされたとしても、プログラムが通常どおりに出力することです(書き込みを行っていないことはかなり確信しています)sed。 問題は、コマンドが2番目のプログラムを呼び出し、それが標準出力に出力されることであるようです。最初のプログラムで印刷された数行があります。これらは編集できます。次に、2番目のプログラムによって出力される値のストリームがあります。これらは編集できません。 Perlおよびawkメソッドも機能しません。

4
パイプ、{リスト; }一部のプログラムでのみ機能する
このような予測不可能な動作については、パワーユーザーからの説明が必要です。 ps -eF | { head -n 1;grep worker; } UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 441 2 0 0 0 2 paź15 ? 00:00:00 [kworker/2:1H] すべてが大丈夫に見える ls -la / | { head -n 1;grep sbin; } からの出力のみを表示します head ...考えてみてstdout 2&gt;&amp;1もうまくいかない
13 shell  pipe 

3
teeを使用してgrepにリダイレクトする方法
Tシャツの使用経験はあまりないので、これがあまり基本的ではないことを願っています。 この質問に対する答えの1つを見た後、私は奇妙な行動に出会いましたtee。 最初の行と見つかった行を出力するために、これを使用できます: ps aux | tee &gt;(head -n1) | grep syslog USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4 ただし、これを(zshで)初めて実行したとき、結果の順序が間違っていて、列ヘッダーがgrepの結果の下にありました(ただし、これは再び起こりませんでした)。 ps aux | tee &gt;(grep syslog) | head -n1 USER PID %CPU %MEM VSZ …

1
なぜ「| メイクファイルのtrueは、「||」と同じ効果があります。本当」
ファイルを削除する前にサービスを停止するメイクファイルがあります。サービスを停止できなかった場合、エラーで中断します。これは明らかに望ましくないので|| true、追加したいと思いましたが、見逃しました|。作ります: stop service foo | true rm /etc/init/foo.conf これがなぜ機能し、何が起こっているのかについて私は混乱しています。これtrueは、単なるキーワードではなくアプリケーションであることを意味していますか?彼らは同じですか?使用する正当な理由はあります| trueか?
13 shell  pipe 

2
複数のプロセス間の通信
私はmanager()関数をx回の個別のプロセスとして実行するbashスクリプトを持っています。スクリプト内からすべてのmanager()プロセスにメッセージを転送するにはどうすればよいですか? 匿名パイプについて読んだことがありますが、メッセージを共有する方法がわかりません。名前付きパイプでそれをやろうとしましたが、プロセスごとに個別の名前付きパイプを作成する必要があるようです。 これを行う最もエレガントな方法は何ですか? これまでの私のコードは次のとおりです。 #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x &amp; x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

5
パイプラインで無制限の量のデータをバッファリングするユーティリティ?
パイプラインに固執して読み取りと書き込みの速度を分離できるユーティリティはありますか? $ producer | buf | consumer 基本的に、buf可能な限り高速に入力を読み取り、メモリに保存して、可能な限り高速で実行しconsumerながら甘い時間を過ごすことができるユーティリティが必要ですproducer。
13 pipe  io  buffer 

2
segfaultingプログラムからのパイプ出力
ttf2afm時々セグメンテーション違反を起こすプログラムと、特にそうではないプログラム(具体的には、tetex 3.0の一部)を呼び出すスクリプトがあります。必要な情報は常にセグメンテーション違反が発生する前に出力されますが、プログラムの失敗時にパイプのリダイレクトが失敗し、パイプに何も出力されないようにするのに苦労しています。 FIFOを介してリダイレクトを試行trueし、最後にプロセスをかっこで囲み、シェル関数から実行し、で囲みましたsh -cが、スクリプトはプロセスが何も、リダイレクトまたはその他を出力しないようにしました。 私はそれがコマンドラインから完全に出力できるが、何らかの理由でスクリプトからではないので、出力できることを知っています。 私の質問は、スクリプトがプログラムがセグメンテーション違反を起こし、出力を提供するという事実を無視する方法はありますか? BASH 4.1.10(2)-releaseを実行しています。

2
Bashのユーティリティプログラムへの連鎖呼び出しをパラメーター化する
Bdinシェルで使用されるブラックボックスUNIXプログラムがあり、stdinからデータの列を読み取り、それらを処理して(平滑化効果を適用して)、stdoutに出力します。UNIXパイプで使用します。たとえば generate | smooth | plot よりスムーズにするために、スムーズを繰り返すことができるので、Bashコマンドラインから次のように呼び出されます。 generate | smooth | smooth | plot あるいは generate | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | plot これは厄介です。私は、Bashラッパーを作成して、smoothその出力をsmooth任意の回数の新しいインスタンスにパイプで送り、新しいインスタンスに戻すことができるようにします generate | newsmooth 5 | plot の代わりに generate | smooth | …

1
プログラムは、stdoutがターミナルまたはパイプに接続されているかどうかをどのように知るのですか?
セグメンテーション違反の直前の出力が必要なため、セグメンテーション違反プログラムのデバッグに問題がありますが、出力をファイルにパイピングするとこれは失われます。この回答:https : //unix.stackexchange.com/a/17339/22615によると、これは、プログラムの出力バッファーが端末に接続されたときにすぐにフラッシュしますが、パイプに接続されたときは特定のポイントでのみです。ここにいくつか質問があります: プログラムは、標準出力の接続先をどのように判断しますか? 「スクリプト」コマンドは、プログラムが端末に書き込むときと同じ動作をどのように生成しますか? スクリプトコマンドなしでこれを実現できますか?
12 terminal  pipe 

2
パイプチェーン内でjqを使用しても出力が生成されない
jq出力がリダイレクトされるときに明示的なフィルターが必要な問題は、Web全体で説明されています。しかしjq、明示的なフィルターが使用されている場合でも、パイプチェーンの一部である場合、出力をリダイレクトできません。 考慮してください: touch in.txt tail -f in.txt | jq '.f1' # in a different terminal: echo '{"f1":1,"f2":2}' &gt;&gt; in.txt echo '{"f1":3,"f2":2}' &gt;&gt; in.txt 予想どおり、jqコマンドからの元の端末の出力は次のとおりです。 1 3 ただし、jqコマンドの最後に何らかのリダイレクトまたはパイピングを追加すると、出力はサイレントになります。 rm in.txt touch in.txt tail -f in.txt | jq '.f1' | tee out.txt # in a different terminal: echo '{"f1":1,"f2":2}' &gt;&gt; in.txt echo …

1
grepを使用しているときに画面上に奇妙な記号がありますか?
何がこれを引き起こしているのでしょうか?grepを使用しない場合、表示されるのはISOコードと空のスペースのみです。 使用したソフトウェア コマンド: ./trans --id --input /path/to/txt | grep ISO | grep [a-z] root@box /test # alias grep alias grep='grep --color=auto' root@box /test # type grep grep is aliased to `grep --color=auto' 通常の出力:

5
macOSで「pwd」を「open」にパイプできないのはなぜですか?
これはmacOS固有ですが、Ask Differentコミュニティに参加するにはあまりにも不自然に思えます。 ターミナルでpwd、結果をコピーし、結果を入力openして貼り付けると、Finderでフォルダーが開きますが、 pwd | open のヘルプドキュメントを印刷しますopen。パイピングが機能しないのに貼り付けが機能するのはなぜですか?
12 osx  pipe 

3
SSH:stdin、stdout、stderrに加えて、追加の「パイプ」fdsを提供します
SSHでホストに接続する場合、通常3「パイプ」は、ホストとゲストとの間に設けられているstdin、stdoutとstderr。 追加のファイル記述子のフォワード(3およびフォワード)を作成するコマンドラインオプションはありますか? たとえば、私はやりたい ssh --forwardfd=10:3 remotehost 'echo test &gt;&amp;3' ローカルで開いたファイル記述子に「テスト」を出力します10。

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