Questions tagged «pipe»

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

3
直接输出到管道和标准输出
我想知道是否可以通过管道将命令的输出定向到标准输出。因此,例如,fortune打印一个幸运饼干并将其复制到剪贴板: $ fortune | tee &gt;(?stdout?) | pbcopy "...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and the Ugly)." (By Matt Welsh)
14 bash  pipe  stdout  tee 

5
如何过滤tar文件的内容,在管道中生成另一个tar文件?
考虑一个来自外部系统的tar文件,该文件包含一些目录,这些目录具有我想要保留的各种属性,例如权限,mtimes等。如何以常规用户(不是root用户)的身份轻松获取这些文件的子集? 寻找类似的东西: tar -f some.tar.gz --subset subdir/ | ssh remote@system tar xvz 保留此tar归档文件中的主要属性(所有权,组,模式,mtime)也很重要。tar文件中的其他属性(例如扩展标头关键字)呢? 如果此子目录包含大文件,则避免使用临时目录的解决方案有很多好处。
13 pipe  tar 

4
如何使用sed操纵连续流输出?
我正在为非技术性观众准备一个演讲。我有一个在bash中运行的程序,该程序输出连续的值流,其中一些很重要。我想突出显示重要结果,以便观众了解他们的频率。问题是我无法sed在正在运行的流上进行操作。如果将结果放入文件中,效果很好,如下所示: cat output.txt | sed "s/some text/some text bolded/" 但是,如果我在运行的输出上尝试相同的操作,如下所示: command | sed "s/some text/some text bolded/" sed什么也没做。有什么想法吗? 正如兰伯特(Lambert)很有帮助地指出的那样,我的说法sed是无所适从。发生的事情是,即使程序通过管道输出,程序也会照常输出到stdout(我很确定它没有写到stderr)sed。 问题似乎是该命令调用了第二个程序,然后将其输出到stdout。第一个程序打印了几行;这些我可以编辑。然后有第二个程序打印的值流;这些我无法编​​辑。 Perl和awk方法也不起作用。

4
管道,{列表;}仅适用于某些程序
对于此类不可预测的行为,需要高级用户的解释: ps -eF | { head -n 1;grep worker; } UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 441 2 0 0 0 2 paź15 ? 00:00:00 [kworker/2:1H] 一切看起来都不错,而 ls -la / | { head -n 1;grep sbin; } 仅显示来自的输出 head ...我想过stdout 2&gt;&amp;1,对我也不起作用,这很奇怪,没有任何解释或建议如何处理?
13 shell  pipe 

3
我如何使用tee重定向到grep
我没有使用tee的丰富经验,所以我希望这不是很基本。 查看此问题的答案之一后,我遇到了一个奇怪的行为tee。 为了输出第一行和找到的行,我可以使用以下命令: ps aux | tee &gt;(head -n1) | grep syslog USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND syslog 806 0.0 0.0 34600 824 ? Sl Sep07 0:00 rsyslogd -c4 但是,我第一次运行此命令(在zsh中)时,结果顺序错误,列标题位于grep结果的下方(但是,此操作不再发生),因此我尝试在以下位置交换命令: ps aux | tee &gt;(grep syslog) | head -n1 USER PID %CPU %MEM VSZ …

1
我对为什么“ |感到困惑 生成文件中的“ true”与“ ||”具有相同的作用。真正”
我有一个makefile,在删除文件之前要在其中停止服务。如果无法停止该服务,则会在出错时中断。这显然是不需要的,所以我想我会添加|| true但错过了|。进行中: stop service foo | true rm /etc/init/foo.conf 我对为什么这起作用以及正在发生的事情感到困惑。这是否意味着它true是一个应用程序,而不仅仅是关键字?他们是一样的吗?有充分的理由使用| true吗?
13 shell  pipe 

2
多个流程之间的沟通
我有一个bash脚本,该脚本将manager()函数作为x时间的单独进程运行。如何从脚本内部将消息转发到所有manager()进程? 我已经读过有关匿名管道的信息,但是我不知道如何与它共享消息。.我尝试使用命名管道进行操作,但是看来我必须为每个进程创建一个单独的命名管道吗? 最优雅的方法是什么? 到目前为止,这是我的代码: #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x &amp; x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

5
实用程序来缓冲管道中无限数量的数据吗?
有没有可以贴在管道中的实用程序来降低读写速度? $ producer | buf | consumer 基本上,我希望有一个实用程序buf能够尽可能快地读取其输入,并将其存储在内存中,以便在尽可能快地运行consumer时花费它的美好时光producer。
13 pipe  io  buffer 

2
段故障处理程序的管道输出
我有一个脚本,该脚本调用ttf2afm有时会出现段错误而有时没有的程序(特别是tetex 3.0的一部分)。我需要的信息总是在段错误之前被打印出来,但是我很难阻止管道重定向失败,并且在程序失败时不向管道输出任何内容。 我尝试过通过FIFO进行重定向,true最后用a括住该过程,从shell函数执行并封装在中sh -c,但是脚本似乎从未允许该过程输出任何东西,无论是重定向还是以其他方式输出-甚至不输出到stderr。 我知道它能够输出,因为它完全有能力从命令行提供它,但是出于某种原因却不能从脚本中提供。 我的问题是,脚本是否可以忽略程序段错误并给我输出的事实? 我正在运行BASH 4.1.10(2)-发行版。

2
在Bash中参数化对应用程序的链接调用
我在Bash shell中使用了一个黑匣子UNIX程序,该程序从stdin读取数据列,对其进行处理(应用平滑效果),然后输出到stdout。我通过UNIX管道使用它,例如 generate | smooth | plot 为了更加平滑,我可以重复进行平滑操作,因此可以从Bash命令行中调用它,如下所示: generate | smooth | smooth | plot 甚至 generate | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | smooth | plot 这变得越来越古怪。我想制作一个Bash包装器,使其能够通过管道传递smooth并将其输出直接反馈到smooth任意次数的新实例中,例如 generate | newsmooth 5 | plot 代替 generate | smooth …

1
程序如何知道stdout是连接到终端还是管道?
我在调试segfaulting程序时遇到了麻烦,因为我需要的是segfault之前的输出,但是如果将输出管道传输到文件中,则会丢失此信息。根据以下答案:https : //unix.stackexchange.com/a/17339/22615,这是因为程序的输出缓冲区在连接到终端时会立即刷新,但在连接到管道时才在特定点刷新。这里有几个问题: 程序如何确定其stdout连接到什么? “脚本”命令如何产生与程序写入终端时相同的行为? 如果没有script命令,可以实现吗?
12 terminal  pipe 

2
在管道链中使用jq不会产生任何输出
jq网上讨论了重定向输出时需要显式过滤器的问题。但是jq,即使在使用显式过滤器的情况下,如果它是管道链的一部分,我也无法重定向输出。 考虑: touch in.txt tail -f in.txt | jq '.f1' # in a different terminal: echo '{"f1":1,"f2":2}' &gt;&gt; in.txt echo '{"f1":3,"f2":2}' &gt;&gt; in.txt 不出所料,该jq命令在原始终端中的输出为: 1 3 但是,如果在jq命令末尾添加任何类型的重定向或管道,则输出将变为静默: rm in.txt touch in.txt tail -f in.txt | jq '.f1' | tee out.txt # in a different terminal: echo '{"f1":1,"f2":2}' &gt;&gt; in.txt echo …

1
使用grep时屏幕上出现奇怪的符号?
知道是什么原因造成的吗?如果不使用grep,则唯一显示的内容是ISO代码和空白。 使用的软件 命令: ./trans --id --input /path/to/txt | grep ISO | grep [a-z] root@box /test # alias grep alias grep='grep --color=auto' root@box /test # type grep grep is aliased to `grep --color=auto' 正常输出:

5
为什么不能在MacOS上将`pwd`传递给`open`?
这是特定于macOS的,但似乎无法在Ask Different社区中使用。 在终端中,我可以pwd复制结果,然后键入open并粘贴结果,文件夹将在Finder中打开,但是 pwd | open 打印的帮助文档open。为什么管道不起作用,但粘贴起作用?
12 osx  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.