Questions tagged «pipe»

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

3
从命名管道(cat或tail -f)连续读取
我已配置rsyslog为将某些日志事件记录到/dev/xconsole: *.*;cron.!=info;mail.!=info |/dev/xconsole /dev/xconsole是一个命名管道(fifo)。如果我想查看正在记录的内容,可以执行cat /dev/xconsole。令我惊讶的是,该命令cat /dev/xconsole在读取文件后没有完成,而是充当了tail -f。换句话说,这两个命令的行为相同: cat /dev/xconsole tail -f /dev/xconsole 有人可以解释为什么吗? 两者之间有什么区别吗?
16 pipe  cat  tail  fifo 

2
STDIN和传递给命令的参数之间有什么区别?
我可以使用任一种形式执行该cat方法: cat file_name cat &lt; file_name 结果是一样的 然后我想以man以下格式执行stdin man &lt; file_name 虽然file_name包含: # file_name cat 但是它弹出 What manual page do you want?而不是执行man cat。 我想知道为什么cat可以接受stdin但不能接受man。命令行参数和之间有什么区别stdin?

1
``watch ps aux |工作解决方案 grep foo`` [关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 watch ps aux | grep foo 不管用: bash: syntax error near unexpected token `}' 我该如何解决?还是有更好的方法?
16 bash  pipe  ps  watch 

3
头吃多余的字符
预期以下shell命令仅输出输入流的奇数行: echo -e "aaa\nbbb\nccc\nddd\n" | (while true; do head -n 1; head -n 1 &gt;/dev/null; done) 但是,它只是打印第一行:aaa。 与-c(--bytes)选项一起使用时不会发生相同的事情: echo 12345678901234567890 | (while true; do head -c 5; head -c 5 &gt;/dev/null; done) 该命令1234512345按预期输出。但这仅在该实用程序的coreutils实现中有效head。该busybox的执行还是吃多余的字符,所以输出正好12345。 我想这种特定的实现方式是出于优化目的而完成的。您不知道行的结尾,因此不知道需要读取多少个字符。不消耗输入流中多余字符的唯一方法是逐字节读取流。但是一次从流中读取一个字节可能很慢。因此,我想head将输入流读取到足够大的缓冲区中,然后计算该缓冲区中的行数。 --bytes使用option 时无法说相同的话。在这种情况下,您知道需要读取多少个字节。因此,您可以准确地读取此字节数,但不能超过此数目。该corelibs实现使用这个机会,但是busybox的一个没有,它仍然比读取所需到缓冲区的字节以上。这样做可能是为了简化实现。 所以这个问题。head实用程序从输入流中消耗比要求更多的字符是否正确?Unix实用程序是否有某种标准?如果存在,是否指定了这种行为? 聚苯乙烯 您必须按Ctrl+C停止上面的命令。Unix实用程序不会在超越时失败EOF。如果您不想按,则可以使用更复杂的命令: echo 12345678901234567890 | (while true; do head -c 5; head -c …


2
有没有办法在管道上使用xargs?
我正在尝试自动将移动到一个文件夹的flac文件转换为另一个文件夹中的mp3。 我当前的代码行是这样的: inotifywait -m -r -q -e moved_to --format "'%w%f'" ~/test | xargs -I x flac -cd x - | lame -b 320 - /media/1tb/x.mp3 为了解释到目前为止的工作方式,inotifywait递归地监视〜/ test到那里移动的文件,并将路径和文件名输出到管道。xargs使用该名称并创建正确的flac命令,将x替换为文件名并将文件解码到另一个管道。在新管道中,lame将flac的输出处理到/ media下的mp3中。我希望xargs以某种方式到达整个管道,在lame命令中替换x或以某种方式将其发送到两个命令都可以访问的变量。我试图弄乱命名管道和爵士乐,但是在两个命令之间通过管道传输实际数据这一事实使我费解了。
15 shell  pipe  xargs  inotify 

3
如何实时显示命令输出的行数?
我正在使用svn export打包程序脚本作为我的应用程序的一部分,并且与许多其他命令一样,此命令似乎没有任何进度条。 目前,我有两种选择: 在没有选项的情况下使用它,并观看它打印数千行 使用--quiet,直到完成后才开始使用。 有没有办法至少实时显示命令输出的行数?如: Exporting SVN directory ... 1234 files 并1234 实时看到这个数字的增加?我可以想象将输出管道到可以执行此操作的命令,但是哪一个呢?

3
使用输入/输出命名管道进行TCP连接
我一直很想让它工作一段时间,所以我怀疑对管道如何工作的某种根本误解是造成麻烦的根本原因。 我的目标是通过netcat文件系统上的某个远程主机启动TCP连接,并在文件系统上有两个命名管道:一个可以读取进程以获取传入数据,另一个可以写入进程作为传出数据。我目前正在使用以下构造: mkfifo in mkfifo out cat out | netcat foo.bar.org 4000 &gt; in &amp; 从这里开始,我想允许其他进程对该开放的TCP连接进行读写。这应该“起作用”,还是有这样的构造不能起作用的原因? 什么似乎目前发生的是,我可以读取out没有问题,但是当我写到in我得到的输出提一个破碎的管道和所有后续通信似乎是死了。有什么想法吗? (相关:我最初使用: netcat foo.bar.org 4000 &lt; out &gt; in &amp; 但发现它阻止了等待输入。我对此也很好奇,但最好在一个单独的问题中解决。)
15 bash  pipe  tcp  netcat 

2
如何使用grep和sort命令进行排序?
我想创建一个在文件中找到的所有TCP服务的排序列表,/etc/services将命令的输出通过管道传递grep tcp /etc/services到命令中sort,然后将该管道的输出重定向到文件中~/pipelab.txt。 我不断收到一条错误消息,指出我的输出是错误的,我也不知道为什么。 这是我最后尝试过的: grep tcp /etc/services &gt; ~/pipelab.txt | sort
15 shell  pipe 

1
为什么用管道“尾巴”改变线的内容?
当我SELECT使用MySQL Workbench 查看a的结果时,只用一个\就可以了 max@host 10:13:58: ~$ mysql -h db-master.domain.local -uuser -ppw db -e ' &gt; SELECT &gt; DISTINCT i.filesourceregexp &gt; FROM db.ImportLogFiles i' +------------------------------------------------+ | filesourceregexp | +------------------------------------------------+ | ^[0-9]{8}_1062355673_merge_google_pbn\.csv$ | | ^[0-9]{8}_8026062435_merge_google_pbn\.csv$ | | ^[0-9]{8}_1062355673_store_visits_report\.csv$ | +------------------------------------------------+ max@host 10:14:10: ~$ mysql -h db-master.domain.local -uuser -ppw db -e ' SELECT …
14 pipe  mysql  tail 

3
管道B到D?-A && B || C | d
有没有一种方法可以重写命令结构,A &amp;&amp; B || C | D以便将B或C管道传输到D? 使用当前命令,仅运行B或运行C和D。 例如:
14 bash  pipe 

9
筛选或通过管道传输文件的某些部分
我有一个输入文件,其中的某些部分用开始和结束标记来分隔,例如: line A line B @@inline-code-start line X line Y line Z @@inline-code-end line C line D 我想对此文件进行转换,以使X,Y,Z行通过某些命令(nl例如)过滤,但其余各行保持不变。请注意,nl(数字行)在行之间累积状态,因此并不是将静态转换应用于X,Y,Z行。(编辑:有人指出,nl在不需要积累状态的模式可以工作,但我只是用nl作为一个例子来简化这个问题在现实中的命令是一个更复杂的自定义脚本。什么我期待对于将标准过滤器应用于输入文件的子部分的问题的通用解决方案) 输出应如下所示: line A line B 1 line X 2 line Y 3 line Z line C line D 文件中可能有几个此类需要转换的部分。 更新2我最初没有指定如果有更多的部分应该发生什么,例如: line A line B @@inline-code-start line X line Y line Z @@inline-code-end …

1
在带有管道的多行bash命令中的单独行上可读的注释?
使用管道创建Shell脚本并使用反斜杠继续行时,我想以健壮,可读和可移植的方式在单独的行上插入注释。 例如,给出以下未注释的多行命令(为清晰起见,从@DigitalRoss盗取): echo abc | tr a-z A-Z | sort | uniq ...从美学上讲,以下内容与我要完成的工作最接近,但是出于明显的原因,它不起作用...是的,我很清楚,这通常不值得评论: # Perform critical system task. # NOTE - An example of what does *not* work. echo abc | # Convert lowercase to uppercase. tr a-z A-Z | # Sort the results. sort | # Only show unique …
14 bash  shell  pipe 

1
后台进程管道输入
如果我想在屏幕上显示“ aaa”: (1)$: echo aaa | cat ... works OK (2)$: echo aaa | ( cat ) ... works OK (3)$: echo aaa | ( cat &amp; ) ... NOT working (4)$: ( echo aaa &amp; ) | cat ... works OK (5)$: echo aaa | ( cat &lt;&amp;0 &amp; …


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.