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

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

3
「read」を使用してスクリプトをパイピングしてbashする
私はそれを通すことによって、スクリプトを実行する必要があるbashとwget(いうよりはbashで直接それを実行しています)。 $ wget -O - http://example.com/my-script.sh | bash スクリプトにreadステートメントが含まれているため、機能しません。何らかの理由で、bashにパイプする場合、これらは機能しません。 # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: &lt;prompt&gt; # But not when piping - returns immediately $ echo 'read …
10 bash  shell  pipe  read 

2
パラメータまたはパイプからの入力を受け入れるBash関数
次のbash関数を、引数またはパイプから入力を受け入れることができるように記述したいと思います。 b64decode() { echo "$1" | base64 --decode; echo } 望ましい使用法: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode &lt; file.txt $ b64decode &lt;&lt;&lt; "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

1
`ドッカーはfooを記録します| less`は検索もスクロールもできませんが、 `docker logs foo 2>&1 | less`は
どちらかを使用すると、読みやすいテキストが得られます。ただし、stderrリダイレクトを使用する場合にのみ、1つのスクロールまたは/ somepatternと入力して一致を取得できます。 検索を行わないと、「検索するものは何もありません(RETURNを押す)」と〜の列が表示されます。 与えられた、stderrとstdoutは同じではありませんが、なぜlessで何かを始めるまで、lessがそれらを同じように表示しないのですか? これは多分私が理解していないいくつかの奇妙なマルチウィンドウvimです。考え?
10 pipe  less  stdout  stderr 

2
パイプでスクリプトを使用しているときにユーザー入力を読み取る方法
一般的な問題 パイプのチェーンの途中であっても、ユーザーと対話するスクリプトを記述したいと思います。 具体例 具体的には、fileまたはを受け取り、stdin行(行番号付き)を表示し、選択範囲または行番号の入力をユーザーに要求し、対応する行をに出力しstdoutます。このスクリプトを呼び出しましょうselector。それから基本的に、私はできるようになりたいです grep abc foo | selector &gt; myfile.tmp foo含む場合 blabcbla foo abc bar quux xyzzy abc 次に、selector(ターミナルではなく、myfile.tmp!)オプションを表示します 1) blabcbla 2) foo abc bar 3) xyzzy abc Select options: その後入力します 2-3 そして結局 foo abc bar xyzzy abc の内容としてmyfile.tmp。 私はセレクタースクリプトを起動して実行しています。入力と出力をリダイレクトしなければ、基本的には完全に機能しています。そう selector foo 私が望むように動作します。ただし、上記の例のように物事を一緒にパイプする場合、selectorは提示されたオプションをに出力myfile.tmpし、grepped入力から選択を読み取ろうとします。 私のアプローチ 次のように、の-uフラグを使用しようとしましreadた exec 4&lt; /proc/$PPID/fd/0 exec …

3
bashコマンドパイプラインの出力を変更する方法
たとえば、いくつかのコマンドからいくつかの行を取得しました $ some-command John Bob Lucy 次に、出力を変更するチェーンコマンドを追加します。 $ some-command | other-command Hi John Bye Hi Bob Bye Hi Lucy Bye 書き方はother-command?(私はbashの初心者です)
10 bash  pipe 

4
並行して作成された他の3つのストリームから単一の出力ストリームを作成する
異なるフォーマットの3種類のデータがあります。データ型ごとに、それを単一の統一フォーマットに変換するPythonスクリプトがあります。 このPythonスクリプトは遅く、CPUにバインドされている(マルチコアマシンのシングルコアに)ため、スクリプトの3つのインスタンスを実行し(データタイプごとに1つ)、それらの出力を組み合わせてに渡しsortます。基本的に、これと同等です: { ./handle_1.py; ./handle_2.py; ./handle_3.py } | sort -n しかし、3つのスクリプトが並行して実行されます。 ストリームを処理するスクリプトのn個のインスタンス間で、いくつかのstdoutストリームをラウンドロビンするためにGNU が使用されているこの質問を見つけましたsplit。 分割されたmanページから: -n, --number=CHUNKS generate CHUNKS output files. See below CHUNKS may be: N split into N files based on size of input K/N output Kth of N to stdout l/N split into N files without splitting lines …

2
コマンドに従う(繰り返し実行する)ことは可能ですか?tail -fを使用してファイルを追跡するので?
「Detail.out」ファイルを生成するスクリプトがあります。ファイルに特定の数の行(およそ21025)が含まれていると、スクリプトは完了します。だから私はコマンドプロンプトに座って自分が走っているのを見つけます: [me@somewhere myDir]$ wc -l */Detail.out 21025 A/Detail.out 21025 B/Detail.out 21025 C/Detail.out 12995 D/Detail.out 10652 E/Detail.out 3481 F/Detail.out 21027 G/Detail.out 21025 H/Detail.out 21025 I/Detail.out ... ... 以前tail -fは特定のファイルを監視していたが、wc -l */Detail.out上記のコマンドの出力を追跡したい。 これは可能ですか?tcshそれが重要であれば、 私は現在Ubuntu 11.04で使用しています。
10 monitoring  pipe  tail 

1
この競合状態をモデル化する確率分布は何ですか?
次のコマンドを検討してください bash -c "echo x; cat 1" | tee 1。 私の理解では、新しいシェルにフォークし、xstdoutに書き込みfile 1 not found、stderrに書き込み、終了して親プロセスに制御を返し、xstdoutとtoに書き込み1ます。したがって、私は最終的な出力がであることを期待しx、ファイル1には文字列が正確に含まれますx。 ただし、これは当てはまりません。実際には、ファイルに1は通常、の少なくとも2つのインスタンスが含まれx、時には数千行のxs が含まれます。コマンドを1万回実行するバッチテストでx、ファイルに書き込まれたsの平均数は52.3で、中央値は1でした。これを引き起こしているメカニズムは何ですか。この動作をモデル化する確率分布は何ですか?私はそれが条件付きで幾何学的で、それ以外は均一であると思います。
10 shell  files  pipe 

4
PIPEで使用されるBash終了ステータス
パイプが使用されているときに終了ステータスがどのように伝えられるかを理解しようとしています。私がwhich存在しないプログラムを見つけるために使用しているとしましょう: which lss echo $? 1 which見つからなかったのでlss、終了ステータス1を取得しました。これで問題ありません。しかし、私が次のことを試みると: which lss | echo $? 0 これは、最後に実行されたコマンドが正常に終了したことを示しています。私がこれを理解できる唯一の方法は、おそらくPIPEも終了ステータスを生成することです。これを理解する正しい方法はありますか?
10 bash  shell-script  pipe  exit 

2
ティーはパイプラインを遅くしますか?
私はティーがパイプラインを遅くするかどうか疑問に思っています。結局のところ、ディスクへのデータの書き込みは、データをパイプするよりも遅くなります。 Tは、データがディスクに書き込まれるまで、次のパイプにデータを送信して待機しますか?(そうでない場合は、送信されたがディスクに書き込まれていないデータをTがキューに入れなければならないので、私には思えないでしょう。) $ program1 input.txt | tee intermediate-file.txt | program2 ...
10 pipe  tee 

4
別のコマンドにパイプする前にコマンド出力を完全にバッファリングしますか?
一時ファイルなしでコマンドが実行された後にのみコマンドを実行する方法はありますか?もう1つの実行中のコマンドと、出力をフォーマットしてcurlを使用してHTTPサーバーに送信する別のコマンドがあります。実行するとcommandA | commandB、commandBが起動curlし、サーバーに接続してデータの送信を開始します。のでcommandAとても時間がかかり、HTTPサーバがタイムアウトになります。やりたいことができるcommandA &gt; /tmp/file &amp;&amp; commandB &lt;/tmp/file &amp;&amp; rm -f /tmp/file 好奇心から、一時ファイルなしでそれを行う方法があるかどうか知りたいです。試してみましたmbuffer -m 20M -q -P 100が、カール工程はまだ始まったばかりです。Mbuffer commandAは、実際にデータを送信する処理が完了するまで待機します。(データ自体は最大で数百kbです)
10 shell  pipe  buffer 

2
同じパイプラインで同じファイルの読み取りと書き込みを常に「失敗」させる方法は?
次のスクリプトがあるとします。 #!/bin/bash for i in $(seq 1000) do cp /etc/passwd tmp cat tmp | head -1 | head -1 | head -1 &gt; tmp #this is the key line cat tmp done 重要な行で、同じファイルtmpを読み書きしますが、失敗することがあります。 (パイプライン内のプロセスが並行して実行されるため競合状態が原因であると読み取りましたが、理由はわかりません-それぞれheadが前のデータからデータを取得する必要がありますか?これは私の主な質問ではありません、しかし、あなたもそれに答えることができます。) スクリプトを実行すると、約200行が出力されます。このスクリプトが常に0行を出力するように強制できる方法はありますか(そのため、I / Oリダイレクトtmpは常に最初に準備され、データは常に破棄されます)?明確にするために、このスクリプトではなく、システム設定を変更することを意味します。 あなたのアイデアをありがとう。

1
stderrをリダイレクトした後のbashスクリプトの出力のパイピング[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 2年前休業。 私のホスティング業者がサービスをするためにシステムを使わなければならないことをする方法のために。 このサービスには実行ファイルがあり、それを実行して2番目の実行ファイルにパイプします。しかし、私はstdoutの代わりにstderrにログを記録する(与えられた)pythonパッケージを使用しており、私が望んでいることを実行できません。 だから私は私のサービスのための実行スクリプトを持っています: #!/bin/sh cd ~/webapp/PriceList exec python3.4 ~/webapp/PriceList/src/main.py これは、ロギングシステムの実行にパイプされます。 #!/bin/sh exec multilog t ./main しかし、パイプはstderrを接続しません(予想どおり)。したがって、グーグルした後、実行にリダイレクトを追加しました。 #!/bin/sh cd ~/webapp/PriceList exec python3.4 ~/webapp/PriceList/src/main.py 2&gt;&amp;1 しかし、これは私の問題を解決しません。私自身の出力(pythons printを使用してstdoutへ)は期待どおりにログに記録されます。stderr出力はログに記録されません。 変更したrunscriptを2つのファイルにリダイレクトすると、リダイレクトがないことが示されます(stderrはまだstderrにあります)。リダイレクトを機能させるにはどうすればよいですか?

4
パイプからユーザー入力を読み取る方法は?
confirmation.sh次の内容の名前のファイルがあるとします。 #!/bin/bash echo -n "Are you sure [Y/n]? " read line case "$line" in n|N) echo "smth" ;; y|Y) echo "smth" ;; esac このスクリプトを次のように実行したいと思います。 cat confirmation.sh | sh 私が見るAre you sure [Y/n]?と、スクリプトが中断されました。どうしたの?

3
コンマ区切りのリストを次のコマンドの引数として指定する方法
s1「、」で区切られた数値のリストを出力するスクリプトがあります1,2,3,4。ここで、これらの数値をs2引数としてスクリプトに指定し、s2がそれぞれで実行され、その結果が別々の行に出力されるようにします。たとえば、s2が数値を2倍する場合、これは私が探している結果です。 2 4 6 8 私が今やっていることは: s1 | xargs -d "," | xargs -n1 s2 でも馬鹿なやり方でやっているような気がします!だから私の質問は: それを行う適切な方法は何ですか? 私の解決策の私の問題は、xargsを2回呼び出し、入力を2回反復することです。これはもちろん、パフォーマンスの観点から見ると妥当ではありません。答えxargs -d "," -n1はいいようですが、それが1回だけ繰り返されるかどうかはわかりません。もしそうなら、あなたの答えでそれを確認してください、そして私はそれを受け入れます。ちなみに、Perlはまだ2度繰り返されており、Perlが多くのシステムに存在しない可能性があるため、Perlは使用しません。
9 pipe  xargs  arguments 

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