Questions tagged «pipe»

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

4
为什么不通过管道传输apt-cache策略输出?
无法理解为什么 $ apt-cache policy foo N: Unable to locate package foo 但 $ apt-cache policy foo 2&gt;&amp;1 | grep . 是空的。 在后一个电话中,我做错了什么假设? 原始任务:我apt-cache policy大概需要处理输出:-) UPD: foo在我的例子中使用可以与任何包名称替代不存在在你的apt-get指数。 UPD 2: 有一个解决方法的答案。+50任何解释该2&gt;&amp;1解决方案不起作用的人将获得额外的奖励。
12 shell  apt  pipe 

2
是否可以使对命名管道的seek()操作成功返回?
有什么方法可以使程序在尝试对seek()命名管道执行操作时成功返回(但就像管道是空文件一样)而不是“非法查找”吗? 我在系统上的所有最后一点记录都存储在SQLite数据库中,而我在任何地方都没有文件。但是,有些程序对此有麻烦。有2种具体情况; 程序要写入syslog-ng作为命名管道创建并正在读取的日志文件。程序seek()由于某种原因想要执行a ,然后失败。 程序(例如denyhosts或fail2ban)想要从syslog-ng创建为命名管道并正在写入的日志文件中读取。该程序要对其执行操作seek()并失败。 理想情况下,我希望这些搜索的行为就像命名管道只是一个空文件一样。我看不到任何原因为什么写日志的程序仍然需要执行查找,它应该只打开文件进行追加并开始写。我可以看到为什么要读取程序,以便它可以从其最后一个位置恢复,所以我希望它的行为就像文件是空的(就像被截断一样)。 那么,可以在命名管道上设置一些选项来使它们以这种方式运行吗?如果没有,那么在syslog-ng打开管道以使其具有这种行为时可以设置一种模式(我愿意进行代码更改)?还是我在一条小河上?
12 pipe  syslog 

3
如何使管道等待文件结束或出现错误后停止?
在观看有关管道恶作剧的视频后,我尝试了以下命令。 man -k . | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf | zathura - 它基本上将要打印的手册页列表打印出来,供用户选择其中之一,然后使用xargs运行man -Tpdf %(打印以从xargs的输入中输出手册页git的pdf),然后将pdf传递给pdf阅读器(zathura )。 问题在于(如您在视频中看到的),即使在dmenu中选择一个联机帮助页之前,pdf阅读器也会启动。而且,如果我单击Esc并没有选择任何内容,则pdf阅读器仍处于打开状态,根本没有显示任何文档。 如何使pdf阅读器(以及管道链中的任何其他命令)仅在其输入到达文件末尾或完全收到输入时才运行?或者,或者,在链接的命令之一返回非零退出状态之后,如何使管道链停止(这样,如果dmenu返回未选择选项的错误,则不会运行以下命令)?

2
如何(以及为什么)使用stderr进行阅读和书写?
根据此答案由席利,less从标准错误读取导航命令,如果它不能够打开/dev/tty。 这似乎令人困惑,因为我从未见过任何东西可以写入另一个程序的stderr流,而且我什至不知道该如何完成。 stderr对阅读和书写开放的目的是什么?如果这有用,我如何在现代系统上使用它?(例如,是否存在一些奥术语法可将某些内容传递到stderr而不是stdin中?)
12 pipe  stderr 

1
Linux中的“泄漏”管道
假设您具有如下所示的管道: $ a | b 如果b停止处理stdin,则在一段时间后,管道将被填满,并将a对其的stdout 写入,将阻塞(直到b再次开始处理或终止)。 如果我想避免这种情况,可以尝试使用更大的管道(或更简单地说,是buffer(1)),如下所示: $ a | buffer | b 这只会给我带来更多的时间,但a最终最终会停止。 我很想拥有(对于我要解决的非常特殊的情况)是拥有一个“泄漏的”管道,该管道在充满时会从缓冲区中丢弃一些数据(理想的是逐行)以a继续处理(您可能会想到,在管道中流动的数据是消耗性的,即,处理数据的b重要性不如a能够不阻塞地运行)。 总结一下,我很想拥有一个有界,漏水的缓冲区: $ a | leakybuffer | b 我可能可以很容易地用任何一种语言来实现它,我只是想知道我是否缺少某些“准备使用”的东西(或者像bash单线的东西)。 注意:在示例中,我使用的是常规管道,但问题同样适用于命名管道 在授予以下答案的同时,我也决定实施LeakyBuffer命令,因为以下简单解决方案有一些局限性:https : //github.com/CAFxX/leakybuffer
12 linux  pipe  fifo  buffer 

2
如何在变量中存储管道(|)?
想法是将其用作...命令中的管道。例如:说有某种长路径必须反复输入,然后是管道和第二个程序,即 "directory1/directory2/direcotry3/file.dat | less -I " 我希望该部分存储在变量中,因此可以这样使用: r="directory1/directory2/direcotry3 \| less -I -p " $ cat path1/path2/$r &lt;searchterm&gt; 相反,我得到 cat: invalid option -- I Try `cat --help' for more information. ...表示管道显然无法正常工作。
12 bash  pipe  variable 

4
netcat不打印响应
我试图 在运行并键入命令时使用netcatand管道响应将命令发送到tcp端口,但它会正确打印响应,但是当我从管道传递命令时,它会正确发送命令但不显示响应 netcat 因此,这可以正常工作: netcat localhost 9009 虽然这只是发送命令,但不显示响应: echo 'my_command' | netcat localhost 9009 为什么? 如何netcat打印响应文本?
12 pipe  netcat 

5
使用“查找”命令找到打开的文件
这可能很容易,但是我无法弄清楚,而且几乎不可搜索。在文件夹层次结构中,我只有一个类型为xyz的文件。我想找到该文件并使用终端命令将其打开。 find . -name *.xyz 这将返回我要查找的文件。现在如何不输入名称就自动打开它? find . -name *xyz | open 这行不通。它说没有找到打开命令。
12 linux  terminal  find  pipe 

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 …

6
半异步管
假设我有以下管道: a | b | c | d 我如何可以等待完成c(或b)在sh或bash?这意味着该脚本d可以开始任何时间(和它不是必须等待),但需要完整的输出c正确地工作。 用例是difftool用于git比较图像的。它由调用,git并需要处理其输入(a | b | c部分)并显示比较结果(d部分)。呼叫者将删除a和所需的输入b。这意味着在从脚本返回之前,进程c(或b)必须终止。另一方面,我不能等待,d因为这意味着我正在等待用户输入。 我知道我可以将的结果写入c一个临时文件,或者在中使用FIFO bash。(不过,不确定FIFO是否会有所帮助。)在没有临时文件的情况下是否可以实现此目的sh? 编辑 如果我能以可靠的方式找出c(或b)进程的进程ID,也许就足够了。然后整个管道可以异步启动,我可以等待进程ID。遵循以下原则 wait $(a | b | { c &amp; [print PID of c] ; } | d) 编辑^ 2 我已经找到了解决方案,欢迎提出评论(或更好的解决方案)。
11 bash  shell  pipe  fifo 

2
循环输出管道可防止局部变量修改
我正在尝试编写一个简单的bash函数,该函数将许多文件和/或目录作为其参数。这应该: 完全限定文件名。 对它们进行排序。 删除重复项。 打印所有实际存在的内容。 返回不存在的文件数。 我有一个脚本,几乎可以执行我想要的操作,但是无法进行排序。按原样返回脚本的返回值是正确的,但是输出不是(未排序和重复的)。如果我取消注释所示的| sort -u语句,则输出正确,但返回值始终为0。 注意:欢迎使用更简单的解决方案来解决问题,但问题实际上是为什么在我的代码中会发生这种情况。也就是说,为什么添加管道似乎停止脚本增加变量的作用r? 这是脚本: function uniqfile { local r=0 for arg in "$@" do readlink -e "$arg" || (( ++r )) done #| sort -u ## remove that comment return $r }

2
如何判断管道缓冲区是否已满?
我正在将一个程序的输出传递到我编写的某些Perl中。这是一个长期运行的过程,有时甚至是几天,所以我想找出瓶颈所在,并尝试打开它们。我想知道是否将数据管道传输到脚本中的速度快于脚本处理数据的速度。如果是这种情况,我将尝试调整我的脚本,但如果不需要,则不会。我看到有人谈论在缓冲区已满时设置标志,以防止对其进行更多写操作,但是我如何检查该标志是否被设置或设置频率?有任何想法吗?
11 pipe 

2
stdin和命令行参数之间的性能差异
对于某些命令,可以将某些输入指定为stdin或命令行参数。 具体来说,假设command可以将stdin输入和文件名用作命令行参数和command &lt; myfile,cat myfile | command 并且command myfile可以产生相同的结果。 例如, 当命令是sed: sed s/day/night/ &lt;myfile &gt;new sed s/day/night/ myfile &gt;new cat myfile | sed s/day/night/ &gt;new 当命令是cat: cat &lt; myfile cat myfile 我想知道关于它们的性能是否有一些通用规则,即,其中哪一个通常是最有效的,而哪一个是最低的? 重定向是否总是比管道更好?

1
使用具有tty输出的可变命令对stdin和stdout进行配管时,zsh无法输入到终端
系统信息: macOS Sierra 10.12.6 zsh 5.4.2 (x86_64-apple-darwin16.7.0) GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.3.0) 滚动到示例在底部,如果你只是想挖成简单的例子,我做。 注意:我不是一个大zsh用户。 我一直在寻找在fzf按键绑定的bash和zsh。 注意它们都是如何运行可变命令的$(__fzfcmd)。__fzfcmd默认情况下,输出fzf到stdout,并且参数替换仅运行fzf由输出产生的命令()。 bash和zsh脚本之间的区别是,bash另一个脚本通过管道传递输出,$(__fzfcmd)但zsh仅将其捕获到数组中。我的猜测是由于一个问题,zsh当您进一步通过管道传输fzf无法输入的位置的输出时,fzf通过管道传输到的过程fzf不会得到任何标准输入。您唯一的选择是to ^Z或^C。^C由于某种原因,似乎使该过程成为背景。或者,也许他们只是想以阵列的形式使用它们,以便可以在其上运行zle vi-fetch-history。该bash版本在与"\e^": history-expand-line 现在fzf并不重要。似乎您只需要一个输出到的程序tty就可以通过参数替换来调用该程序,从而导致此问题。因此,我将显示一些更简单的示例。 这是一些其他输出到的命令,这些命令tty可能会导致以下问题zsh: vipe(在管道中间运行编辑器) 'vim -' (使vim从stdin读取。类似于vipe,但不会输出到stdout) 在下面的例子中,更换的每次出现vipe用vim -,如果你不想做一个单独的安装。只是要记住,vim -不会像vipe那样将编辑器内容输出到stdout 。 例子: 1) echo 1 | vipe | cat # works in both bash and zsh 2) echo 1 | $(echo …
11 bash  zsh  pipe  tty 

4
在后台管道命令序列中获取任何命令的PID
如果在中bash执行: cmd1 | cmd2 | ... | cmdi | ... | cmdn &amp; 哪里cmd{1..n}可能没有区别,我该如何获取PID cmdi?或者,我如何发信号通知该cmdi过程?(例如,发送SIGUSR1?) pkill/ pgrep,pidof等看起来不像很好的答案,因为其他情况下cmdi或许运行,包括作为同一管道的一部分。jobs -p给cmd1我的PID 。 i可以是{1..n}。
11 bash  shell  pipe  job-control 

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.