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

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

3
名前付きパイプからの連続読み取り(catまたはtail -f)
rsyslog特定のログイベントを記録するように設定しました/dev/xconsole: *.*;cron.!=info;mail.!=info |/dev/xconsole /dev/xconsole名前付きパイプ(fifo)です。ログに記録されているものを確認したい場合は、できますcat /dev/xconsole。コマンドcat /dev/xconsoleがファイルの読み取り後に終了せず、代わりにとして機能することを見て驚いていますtail -f。つまり、2つのコマンドは同じように動作します。 cat /dev/xconsole tail -f /dev/xconsole 誰かがその理由を説明してもらえますか? 2つの間に違いはありますか?
16 pipe  cat  tail  fifo 

2
STDINとコマンドに渡される引数の違いは何ですか?
いずれかの形式を使用してcatメソッドを実行できます。 cat file_name cat &lt; file_name 結果は同じです 次に、私manはの形式で実行したいstdin man &lt; file_name しばらくはfile_name含まれています: # file_name cat ただしWhat manual page do you want?、executeではなくポップアップし man catます。 なぜ引数としてcat受け入れるstdinことがmanできるができないのかを知りたい。そして、コマンドライン引数との違いは何stdinですか?

1
「watch ps aux | grep foo`` [終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 2年前休業。 watch ps aux | grep foo 動かない: bash: syntax error near unexpected token `}' これを修正するにはどうすればよいですか、それとももっと良い方法がありますか?
16 bash  pipe  ps  watch 

3
頭が余分なキャラクターを食べる
次のシェルコマンドは、入力ストリームの奇数行のみを出力するものと想定されていました。 echo -e "aaa\nbbb\nccc\nddd\n" | (while true; do head -n 1; head -n 1 &gt;/dev/null; done) ただし、代わりに最初の行を出力しますaaa。 -c(--bytes)オプションを使用した場合、同じことは起こりません。 echo 12345678901234567890 | (while true; do head -c 5; head -c 5 &gt;/dev/null; done) このコマンド1234512345は期待どおりに出力します。ただし、これはユーティリティのcoreutils実装でのみ機能しheadます。busyboxのの出力がちょうどあるので、実装はまだ、余分な文字を食べます12345。 この特定の実装方法は、最適化のために行われていると思います。行の終わりがわからないため、読む必要がある文字数がわかりません。入力ストリームから余分な文字を消費しない唯一の方法は、バイト単位でストリームを読み取ることです。ただし、一度に1バイトずつストリームから読み取るのは遅い場合があります。したがってhead、入力ストリームを十分な大きさのバッファに読み込んでから、そのバッファ内の行をカウントすると思います。 --bytesオプションが使用される場合にも同じことは言えません。この場合、読み取る必要があるバイト数がわかります。したがって、このバイト数を正確に読み取ることができますが、それ以上はできません。corelibsの実装は、この機会を使用しますが、busyboxのの 1にはない、それはまだバッファに必要以上のバイトを読み取ります。おそらく実装を簡素化するために行われます。 質問です。headユーティリティが入力ストリームから要求されたより多くの文字を消費することは正しいですか?Unixユーティリティには何らかの標準がありますか?そして、もしあれば、この動作を指定しますか? PS を押しCtrl+Cて上記のコマンドを停止する必要があります。Unixユーティリティは、以降の読み取りで失敗しませんEOF。押したくない場合は、より複雑なコマンドを使用できます。 echo 12345678901234567890 | (while true; do head -c 5; head -c …


2
パイプでxargsを使用する方法はありますか?
フォルダーに移動したflacファイルを別のフォルダーのmp3に自動的に変換しようとしています。 私の現在のコード行はこれです: inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test | xargs -I x flac -cd x - | lame -b 320 - /media/1tb/x.mp3 これまでの動作を説明するために、inotifywaitは、そこに移動したファイルを〜/ testで再帰的に監視し、パスとファイル名をパイプに出力します。xargsはその名前を使用して適切なflacコマンドを作成し、xをファイル名に置き換え、ファイルを別のパイプにデコードします。新しいパイプでは、lameはflacの出力を/ mediaの下のmp3に処理します。xargsにパイプを介して何らかの方法で到達して、lameコマンドのxを置き換えるか、何らかの方法で両方のコマンドがアクセスできる変数に送信するか、何かが欲しい。名前付きパイプとそのジャズをいじってみましたが、2つのコマンド間でパイプ処理される実際のデータがあるという事実に頭を悩ませています。
15 shell  pipe  xargs  inotify 

3
コマンドによって出力された行数をリアルタイムで表示する方法は?
私はsvn export自分のアプリケーションのパッケージャースクリプトの一部として使用していますが、このコマンドは、他の多くのコマンドと同様、プログレスバーを備えていないようです。 現時点では2つの選択肢があります。 オプションなしで使用し、数千行を印刷するのを見る を使用し--quiet、完了するまで何もしません。 少なくともコマンドによって出力された行数をリアルタイムで表示する方法はありますか?といった: Exporting SVN directory ... 1234 files そして、この数1234 がリアルタイムで増加するのを見てください。これを行うコマンドに出力をパイピングすることを想像できますが、どれですか?

3
TCP接続にin / out名前付きパイプを使用する
私はこれをしばらくの間機能させることに悩んでいたので、パイプがどのように機能するかについての根本的な誤解が私のトラブルの根本原因であると考えています。 私の目標は、リモートホストへのTCP接続を開始netcatし、ファイルシステム上に2つの名前付きパイプを作成することです。1つはプロセスから読み取りデータを取得し、もう1つはプロセスが送信データとして書き込むことができます。現在、次の構成を使用しています。 mkfifo in mkfifo out cat out | netcat foo.bar.org 4000 &gt; in &amp; ここから、他のプロセスがこのオープンTCP接続との間で読み書きできるようにしたいと思います。これは「うまくいく」のでしょうか、それともこのような構成が機能しない理由がありますか? 現在何が起こっているように見えるかはout問題なく読むことができるが、私が書いたときin、壊れたパイプを言及する出力が得られ、その後のすべての通信は死んでいるように見える。考え? (関連:私はもともと使用しました: netcat foo.bar.org 4000 &lt; out &gt; in &amp; しかし、入力待ちをブロックすることがわかりました。私もこれに興味がありますが、おそらく別の質問で対処した方が良いでしょう。)
15 bash  pipe  tcp  netcat 

1
「テール」へのパイピングが行の内容を変更するのはなぜですか?
SELECTMySQL Workbenchでの結果を表示すると、1つの\で正しい max@host 10:13:58: ~$ mysql -h db-master.domain.local -uuser -ppw db -e ' &gt; SELECT &gt; DISTINCT i.filesourceregexp &gt; FROM db.ImportLogFiles i' +------------------------------------------------+ | filesourceregexp | +------------------------------------------------+ | ^[0-9]{8}_1062355673_merge_google_pbn\.csv$ | | ^[0-9]{8}_8026062435_merge_google_pbn\.csv$ | | ^[0-9]{8}_1062355673_store_visits_report\.csv$ | +------------------------------------------------+ max@host 10:14:10: ~$ mysql -h db-master.domain.local -uuser -ppw db -e ' SELECT DISTINCT …
14 pipe  mysql  tail 

3
パイプBからD?-A && B || C | D
A &amp;&amp; B || C | DBまたはCがDにパイプされるように、コマンド構造を書き直す方法はありますか? 現在のコマンドでは、Bのみ、またはCとDの両方が実行されます。 例えば:
14 bash  pipe 

9
ファイルの特定のセクションをフィルターまたはパイプする
入力ファイルにはいくつかのセクションがあり、開始タグと終了タグで区切られています。次に例を示します。 line A line B @@inline-code-start line X line Y line Z @@inline-code-end line C line D このファイルに変換を適用して、行X、Y、Zを何らかのコマンド(nlなど)でフィルター処理し、残りの行は変更せずに通過させます。nl(number行)は行をまたいで状態を蓄積するため、行X、Y、Zのそれぞれに適用されるのは静的な変換ではないことに注意してください。(編集:それがあることが指摘されたnlモードでの缶の仕事が蓄積状態を必要としないが、私はちょうど使用していますnl質問を簡素化するための例として、実際にはコマンドは、より複雑なカスタムスクリプトです。。私が本当に探していますどのようなforは、入力ファイルのサブセクションに標準フィルターを適用する問題の一般的な解決策です) 出力は次のようになります。 line A line B 1 line X 2 line Y 3 line Z line C line D ファイルには、変換を必要とするこのようなセクションがいくつか存在する場合があります。 更新2私はもともと、たとえば次のようなセクションが複数ある場合に何が起こるかを指定しませんでした。 line A line B @@inline-code-start line X line Y line Z @@inline-code-end …

1
パイプラインを使用した複数行のbashコマンドで、別々の行に読みやすいコメントがありますか?
パイプラインを使用してシェルスクリプトを作成し、バックスラッシュを使用して行を継続する場合、堅牢で読みやすく、移植可能な方法でコメントを別の行に挿入したいと思います。 たとえば、次のコメントなしの複数行コマンド(わかりやすくするために@DigitalRossから盗まれました)を考えます。 echo abc | tr a-z A-Z | sort | uniq ...以下は私が達成したいものに審美的に最も近いものですが、明白な理由で機能しません...そしてはい、これは通常コメントする価値のあるものではないことをよく知っています: # Perform critical system task. # NOTE - An example of what does *not* work. echo abc | # Convert lowercase to uppercase. tr a-z A-Z | # Sort the results. sort | # Only show unique …
14 bash  shell  pipe 

2
grepおよびsortコマンドを使用してソートするにはどうすればよいですか?
ファイル/etc/servicesで見つかったすべてのTCPサービスのソートされたリストを作成し、コマンドの出力をコマンドgrep tcp /etc/servicesにsortパイプし、このパイプの出力をファイルにリダイレクトしたいです~/pipelab.txt。 出力が間違っているというエラーメッセージが引き続き表示されますが、その理由はわかりません。 これは私が最後に試したものです: grep tcp /etc/services &gt; ~/pipelab.txt | sort
14 shell  pipe 



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