タグ付けされた質問 「process-substitution」

プロセス置換は、コマンドの入力または出力をファイルとして表示できるプロセス間通信の形式です( `<(cmd)`や `>(cmd)`など)。

3
構成ファイル '/ dev / fd / 63'を開けませんでした、エラー:wpa_supplicantにそのようなファイルまたはディレクトリはありません
私がこれをするとき: sudo wpa_supplicant -D nl80211,wext -i wlp4s0 -c &lt;(wpa_passphrase "some ssid" "password") 私は得る Successfully initialized wpa_supplicant Failed to open config file '/dev/fd/63', error: No such file or directory Failed to read or parse configuration '/dev/fd/63' 何か案は?

2
このbashパイプ構造を使用すると、なぜデータが失われたように見えるのですか?
私はそのようないくつかのプログラムを組み合わせようとしています(余分なインクルードは無視してください、これは進行中の重い作業です): pv -q -l -L 1 &lt; input.csv | ./repeat &lt;(nc "host" 1234) 繰り返しプログラムのソースは次のようになります。 #include &lt;fcntl.h&gt; #include &lt;stdint.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;sys/epoll.h&gt; #include &lt;sys/stat.h&gt; #include &lt;sys/types.h&gt; #include &lt;unistd.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; inline std::string readline(int fd, const size_t len, const char delim = '\n') { std::string …

2
プロセス置換を伴う出力指図
これは私が普通に実行するために行うものですgrepし、wcそれを2回スキャンすることなく、ファイルに &lt;file.txt tee &gt;(grep LITERAL) &gt;(wc -l) &gt;/dev/null しかし、これは EXEC LITERAL 32 時々そして 32 EXEC LITERAL またある時には。(からgrepの出力wcは、最初のインスタンスからの出力に先行し、2番目のインスタンスではその逆です。) 一方、リダイレクトとファイル記述子では { { &lt;file.txt tee /dev/fd/3 | grep LITERAL &gt;&amp;4; } 3&gt;&amp;1 | wc -l ;} 4&gt;&amp;1 私はいつも得るようです EXEC LITERAL 32 出力順序が予測可能であることを好みますが、2番目のアプローチで保証されますか?

1
プロセス置換<()がssh -Fで機能しないのはなぜですか
迷惑な仮想マシンがいくつかあります。それらにログインするには、vagrant sshコマンドを発行します。通常のsshコマンドでログインしたい。vagrant ssh-config適した設定ファイルを出力します $ vagrant ssh-config Host default HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /home/cbliard/.vagrant.d/insecure_private_key IdentitiesOnly yes LogLevel FATAL この設定をファイルに出力してssh -Fで使用すると、すべてが正常に機能します。 $ vagrant ssh-config &gt; /tmp/config $ ssh -F /tmp/config default =&gt; logged successfully プロセス置換演算子&lt;(cmd)を使用して一時構成ファイルの作成を防ぐと、失敗します。 $ ssh -F &lt;(vagrant ssh-config) default Can't open …

1
GNU Makefileでのプロセス置換
bashプロンプトで、疑似ファイルを使用してdiffを実行できます。 diff &lt;(echo test) &lt;(echo test) これをそのままMakefileに追加すると失敗します。 all: diff &lt;(echo test) &lt;(echo test) エラー(ヒント:/ bin / shがこのシステムの/ bin / bashを指しています): /bin/sh: -c: line 0: syntax error near unexpected token `(' /bin/sh: -c: line 0: `diff &lt;(echo test) &lt;(echo test)' それはどういう意味ですか、一時ファイルを使用せずに2つの出力を比較する方法はありますか?


2
bashが「>>()」を処理する方法
出力のリダイレクトとプロセスの置換を実験しているときに、次のコマンドとその結果の出力を偶然見つけました。 me @ elem:〜$ echo foo&gt;&gt;(cat); エコーバー バー me @ elem:〜$ foo (はい、最後の空の改行は意図的なものです。) つまり、echoのバーをbashし、通常のプロンプトを表示し、echoのfoo、echoは改行、カーソルをそこに残します。もう一度Enterキーを押すと、プロンプトが新しい行に出力され、カーソルはそのあとに表示されます(空のコマンドラインでEnterキーを押すと期待どおり)。 私はそれがファイル記述子にfooを書き込み、猫がそれを読み取り、2番目のエコーエコーのバーであるエコーのfooを読み取り、その後コマンドプロンプトに戻ることを期待していました。しかし、明らかにそうではありません。 誰かが何が起こっているのか説明してもらえますか?

3
スクリプト出力の自己リダイレクトに相当するダッシュ
Bashでは、現在実行中のスクリプトの将来のすべての stdout出力をリダイレクトできます。たとえば、このスクリプトでは、 exec &gt; &gt;(logger -t my-awesome-script) echo 1 echo 2 echo 3 これはsyslogで終わります: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 しかし、これはBash固有であり、リダイレクトを備えたネイキッドexecはDashでは機能しないようです。 Syntax error: redirection unexpected Dashで、またはおそらく両方のシェルで機能させるにはどうすればよいですか?

1
一時ファイルによるbashプロセスの置換
たとえば、一部のプログラムでは、ファイルをシーク可能にする必要がありますobjdump。 $ objdump -D -b binary -m i8086 &lt;(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) objdump: Warning: '/proc/self/fd/11' is not an ordinary file プロセス置換で一時ファイルを使用すると便利です。 manページで、bashがプロセス置換を使用して一時ファイルにフォールバックできることを確認できますが、一時ファイルを使用するように明示的に要求できますか? 同様zshの=()。 $ objdump -D -b binary -m i8086 =(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) /tmp/zsh1u1Nrw: file format binary Disassembly of section .data: …

4
異なるコマンドの入力を分割して結果を組み合わせる
異なるコマンドの結果を組み合わせる方法を知っています paste -t',' &lt;(commanda) &lt;(commandb) 同じ入力を別のコマンドにパイプすることがわかっている cat myfile | tee &gt;(commanda) &gt;(commandb) これらのコマンドを組み合わせる方法は?できるように cat myfile | tee &gt;(commanda) &gt;(commandb) | paste -t',' resulta resultb ファイルがあるとしましょう myfile: 1 2 3 4 新しいファイルを作りたい 1 4 2 2 3 4 3 2 6 4 1 8 使った cat myfile | tee &gt;(tac) &gt;(awk …

1
これらの4つのコマンドの違いは何ですか(fifo、プロセス置換、リダイレクト…)
私の目標は、ncおよびを使用して単純なエコーサーバーを作成することfifoです。私はそれを行うための最良の方法を探しているのではなく、単に次のコマンドのセマンティクスを理解しようとしているだけです(フォークが発生するのはいつ、なぜ、何が変わるのか、なぜコマンドの動作が異なるのか...)。 すべてのコマンドは、POSIXで動作する場合、私はわからないので、私は、バッシュを使っていshたりzsh、ksh... タイトルで言及している4つのコマンドを次に示します(既に実行したと想定していますmkfifo fifo)。 cat fifo | nc -l localhost 8888 &gt; fifo exec 3&lt;&gt; fifo &amp;&amp; nc -l localhost 8888 &lt;&amp;3 &gt;&amp;3 &amp;&amp; exec 3&gt;&amp;- nc -l localhost 8888 &lt;(cat fifo) &gt; fifo nc -l localhost 8888 &lt; fifo &gt; fifo 今、私は4つのコマンドが同じことをすることを期待しています、少なくとも最後の2つは同じことをすることです。 最初のコマンドは期待どおりに動作します。クライアントが接続を閉じるとシャットダウンする単純なエコーサーバーです。 1のように動作します。 サーバーに接続してデータを送信できますが、何も返されません。クライアント接続を閉じると、サーバーがシャットダウンします。 サーバーに接続できません。サーバーは永久に待機します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.