Questions tagged «process-substitution»

进程替换是一种进程间通信的形式,它允许命令的输入或输出显示为文件(例如:“ <(cmd)”或“>(cmd)”)。


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无需扫描两次的工作 &lt;file.txt tee &gt;(grep LITERAL) &gt;(wc -l) &gt;/dev/null 但是,这产生了 EXEC LITERAL 32 有时和 32 EXEC LITERAL 在其他时间。(第一个实例的输出grep先wc于,第二个实例的反之亦然。) 另一方面,带有重定向和文件描述符 { { &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
为什么进程替换<()与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
bash如何对待“>>()”
在尝试输出重定向和进程替换时,我偶然发现了以下命令及其结果输出: me @ elem:〜$ echo foo&gt;&gt;(cat); 回声条 酒吧 me @ elem:〜$ foo (是的,最后的空换行是有意的。) 因此,bash echo的栏会显示我通常的提示,echo的foo,echo的换行符,然后将光标留在那里。如果再次按下Enter键,它将在新行上打印提示,并将光标留在它的后面(按预期,当有人在空命令行上按下Enter键时)。 我期望它将foo写入文件描述符,cat读取它并回显foo,第二个回显回显的栏,然后返回命令提示符。但这显然不是事实。 有人可以解释发生了什么吗?

3
Dash等效于脚本输出的自我重定向
在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中或在两个Shell中使其工作?

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 让进程替换使用临时文件会很方便。 我可以在手册页中看到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
这四个命令(fifo,进程替换,重定向...)之间有什么区别?
我的目标是使用nc和创建一个简单的echo服务器fifo。我并不是在寻找最好的方法,我只是想了解以下命令的语义(何时发生派生,为什么,它发生了什么变化,为什么命令表现不同...)。 我使用bash,所以我不知道如果所有的命令都将使用POSIX工作sh或zsh,ksh... 这是我在标题中提到的四个命令(假设我已经做过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个命令可以执行相同的操作,至少最后两个命令可以执行相同的操作。 第一个命令的行为符合预期,一个简单的回显服务器在客户端关闭连接时将关闭。 行为像1。 我可以连接到服务器,发送数据,但是我什么也收不到。当我关闭客户端连接时,服务器关闭。 无法连接到服务器,服务器将永远监听。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.