Questions tagged «pipe»

Unix管道连接两个进程的文件描述符。使用在<unistd.h>中声明的POSIX pipe()函数创建管道。外壳程序使用“ |”在进程之间提供管道创建。

13
关闭管道中的缓冲
我有一个脚本,它调用两个命令: long_running_command | print_progress 该long_running_command打印进度,但我不开心吧。我print_progress用来使其更美观(即,我将进度打印在一行中)。 问题:将管道连接到stdout还会激活4K缓冲区,到漂亮的打印程序不会得到任何东西……没有任何东西……没有任何东西 ……:) 如何禁用4K缓冲区long_running_command(不,我没有源)?
395 shell  pipe  buffer 



1
Bash:“> |”是做什么的?
我刚刚看到了这个记录。 $ some-command &gt;| /tmp/output.txt 垂直管道用于标准重定向中,将一个命令的输出“管道化”到另一个命令&gt;|,实际上完全没有用,因为与&gt;在这种情况下一样?

6
管道缓冲区有多大?
作为注释,我对为什么makefile中的“ | true”与“ || true”用户cjm 产生相同的效果感到困惑: 避免的另一个原因 true是如果命令产生的输出足以填充管道缓冲区,它将阻塞等待true的读取。 我们是否可以找出管道缓冲区的大小?
146 pipe  buffer 

7
将上一个命令的输出作为参数传递给next
我有一个将数据输出到stdout(command1 -p=aaa -v=bbb -i=4)的命令。输出行可以具有以下值: rate (10%) - name: value - 10Kbps 我想grep该输出以存储该“比率”(我想这里的管道会很有用)。最后,我希望该比率成为第二个命令的参数值(假设command2 -t=${rate}) 在我这边看起来很棘手;我想更好地了解如何使用管道,grep,sed等。 我已经尝试了很多类似的组合,但是我对这些组合感到困惑: $ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2&gt;&amp;1 command2 -t="rate was "${rate}

4
cat file |有什么区别?./binary”和“ ./binary <文件”?
我有一个二进制文件(无法修改),可以这样做: ./binary &lt; file 我也可以: ./binary &lt;&lt; EOF &gt; "line 1 of file" &gt; "line 2 of file" ... &gt; "last line of file" &gt; EOF 但 cat file | ./binary 给我一个错误。我不知道为什么它不适用于管道。在所有3种情况下,文件的内容均以二进制的标准输入(以不同方式)提供: bash读取文件并将其提供给二进制的 stdin bash从stdin读取行(直到EOF)并将其提供给binary的 stdin cat读取文件行并将其放入stdout,bash将其重定向到二进制的 stdin 据我所知,二进制文件不会注意到这3个文件之间的区别。有人可以解释为什么第三种情况不起作用吗? 顺便说一句:二进制给出的错误是: 20170116 / 125624.689-U3000011无法读取脚本文件'',错误代码'14'。 但是我的主要问题是,具有这三个选项的任何程序有什么区别? 以下是一些详细信息:我使用strace再次尝试了该 方法,实际上在出现错误消息之前,有来自lseek的ESPIPE(非法查找)错误, 接着是来自读取的EFAULT(错误地址)错误。 我试着用Ruby脚本(不使用临时文件)来控制二进制是部分callapi从为Automic(UC4) 。


3
临时数据的伪文件
我经常想将相对较短的字符串数据(尽管可能是几行)馈送到命令行程序,这些程序仅以重复的方式接受来自文件(例如wdiff)的输入。当然,我可以创建一个或多个临时文件,将字符串保存在那里,然后以文件名作为参数运行命令。但是在我看来,如果将数据实际写入磁盘,此过程似乎效率很低,而且如果我多次重复此过程(例如,如果我要馈送一行长文本),则对磁盘的损害可能超过必要。文件到wdiff。有没有建议的方法来避免这种情况,例如使用伪文件(例如管道)来临时存储数据,而无需实际将其写入磁盘(或仅在超过临界长度时才将其写入)。请注意,wdiff具有两个参数,并且,wdiff &lt;"text"。
98 bash  files  pipe 

4
管道命令以什么顺序运行?
我从来没有真正考虑过shell如何实际执行管道命令。一直有人告诉我,“一个程序的标准输出通过管道传递到另一个程序的标准输入中”,作为思考管道的一种方式。因此,我自然而然地认为A | B,A将首先运行,然后B获得A的标准输出,并使用A的标准输出作为其输入。 但是我注意到,当人们在ps中搜索特定进程时,他们会在命令末尾包含grep -v“ grep”,以确保grep不会出现在最终输出中。这意味着在命令ps aux | grep“ bash” | grep -v“ grep”,这意味着ps知道grep正在运行,因此在ps的输出中。但是,如果ps在其输出通过管道传递到grep之前完成运行,它怎么知道grep正在运行? flamingtoast@FTOAST-UBUNTU: ~$ ps | grep ".*" PID TTY TIME CMD 3773 pts/0 00:00:00 bash 3784 pts/0 00:00:00 ps 3785 pts/0 00:00:00 grep
89 pipe  ps 

5
工艺替代和管道
我想知道如何理解以下内容: 将命令的标准输出插入另一个命令的标准输入是一项强大的技术。但是,如果您需要传递多个命令的标准输出怎么办?这是过程替代的地方。 换句话说,过程替换可以执行管道的任何操作吗? 进程替换可以做什么,而管道不能做什么?

4
无法通过管道传递到差异?
我想变得聪明一点,将远程文件与本地文件进行比较,而无需先手动下载它。我可以通过以下方式获取远程文件的内容 ssh user@remote-host "cat path/file.name" 但是,将其传递给 diff ssh user@remote-host "cat path/file.name" | diff path/file.name 给我这个: diff: missing operand after `path/file.nae' diff: Try `diff --help' for more information. 我已经设置了ssh密钥,因此它不会提示我输入密码。有什么解决方法?


7
程序将STDIN传递到STDOUT并去除了颜色代码?
我有一个产生彩色输出的命令,我想将其通过管道输出到一个去除了颜色代码的文件中。cat除了剥离颜色代码外,是否有其他类似的命令?我计划做这样的事情: $ command-that-produces-colored-output | stripcolorcodes &gt; outfile
64 colors  pipe  filter 

8
如何在两个程序之间建立双向管道?
每个人都知道如何使两个程序(绑定之间的单向管stdout第一个和stdin第二之一): first | second。 但是如何制作双向管道,即交叉绑定stdin和stdout两个程序?有没有简单的方法可以在Shell中完成?
63 shell  pipe 

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.