Questions tagged «pipe»

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

2
连接STDOUT和STDIN是什么意思?
我正在读一本书,上面写着: 每个过程至少具有三个可用的通信通道:“标准输入”(STDIN),“标准输出”(STDOUT)和“标准错误”(STDERR)。 大多数命令接受来自STDIN的输入,并将其输出写入STDOUT。他们将错误消息写入STDERR。该约定使您可以像构建模块一样将命令串在一起以创建复合管道。 Shell将符号&lt;,&gt;和解释&gt;&gt;为将命令的输入或输出重新路由到文件或从文件重新路由的指令。 要将一个命令的STDOUT连接到另一个命令的STDIN,请使用| 通常称为管道的符号。 ps -ef | grep httpd 因此,基本上说的是,标准输入是允许用户写入文件的命令,而标准输出是具有bash shell将输出写入到shell的命令,而标准错误就像输出,但仅文件系统出错时调用。然后我们进入连接STDOUT和STDIN的部分,我迷路了。

2
Bash函数接受参数或管道的输入
我想以一种可以接受参数或管道输入的方式编写以下bash函数: b64decode() { echo "$1" | base64 --decode; echo } 所需用法: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode &lt; file.txt $ b64decode &lt;&lt;&lt; "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

1
`docker logs foo | less不可搜索或不可滚动,但docker logs foo 2>&1 | 更少`是
使用任何一个都可以阅读文本。但是只有使用stderr重定向,才能滚动或键入/ somepattern并获得匹配项。 没有它,搜索将给出“没有要搜索的内容(按RETURN)”和〜的列。 既然,stderr和stdout是不一样的,但是为什么直到我开始用更少的东西做完之后,为什么stderr和stdout却不显示它们相同? 这也许是一些我不理解的奇怪的多窗口vim东西。有什么想法吗?
10 pipe  less  stdout  stderr 

2
在管道中使用脚本时如何读取用户输入
一般问题 我想编写一个与用户交互的脚本,即使该脚本位于管道链的中间。 具体例子 具体来说,它用file或来stdin显示行(带有行号),要求用户输入选择或行号,然后将相应的行打印到stdout。我们将此脚本称为selector。然后,基本上,我希望能够 grep abc foo | selector &gt; myfile.tmp 如果foo包含 blabcbla foo abc bar quux xyzzy abc 然后selector向我展示(在终端上,而不是在myfile.tmp!中)带有选项 1) blabcbla 2) foo abc bar 3) xyzzy abc Select options: 之后我输入 2-3 并以 foo abc bar xyzzy abc 作为的内容myfile.tmp。 我已经启动并运行了一个选择器脚本,如果我不重定向输入和输出,则基本上可以正常运行。所以 selector foo 表现得像我想要的。但是,当像上面的示例中那样将内容管道在一起时,selector将显示的选项打印到myfile.tmp并尝试从grepped输入中读取选择。 我的方法 我尝试使用的-u标志read,如 exec 4&lt; /proc/$PPID/fd/0 exec …

3
如何在bash命令管道中修改输出
例如,我从某些命令获得了一些内容 $ some-command John Bob Lucy 现在,我想添加链接命令,以修改输出。 $ some-command | other-command Hi John Bye Hi Bob Bye Hi Lucy Bye 怎么写other-command?(我是bash的新手)
10 bash  pipe 

4
从并行产生的其他三个流中创建一个输出流
我有三种格式不同的数据。对于每种数据类型,都有一个Python脚本将其转换为统一的格式。 该Python脚本运行缓慢且受CPU限制(连接到多核计算机上的单个核),因此我想运行该脚本的三个实例(每种数据类型一个),并将其输出组合到中sort。基本上,等效于: { ./handle_1.py; ./handle_2.py; ./handle_3.py } | sort -n 但是,三个脚本并行运行。 我发现了一个问题,其中使用GNU split在处理该流的脚本的n个实例之间循环一些stdout流。 在拆分手册页中: -n, --number=CHUNKS generate CHUNKS output files. See below CHUNKS may be: N split into N files based on size of input K/N output Kth of N to stdout l/N split into N files without splitting lines …

2
是否可以遵循命令(反复运行)?就像使用tail -f跟随文件一样?
我有一个脚本生成文件'Detail.out'。我知道只要文件包含一定数量的行(大约21025),脚本就完成了。所以我发现自己坐在命令提示符下运行: [me@somewhere myDir]$ wc -l */Detail.out 21025 A/Detail.out 21025 B/Detail.out 21025 C/Detail.out 12995 D/Detail.out 10652 E/Detail.out 3481 F/Detail.out 21027 G/Detail.out 21025 H/Detail.out 21025 I/Detail.out ... ... 我曾经tail -f看过一个特定的文件,但是我想跟踪wc -l */Detail.out上面显示的命令的输出。 这可能吗?tcsh如果有问题, 我目前在Ubuntu 11.04中使用。
10 monitoring  pipe  tail 

1
什么概率分布可以模拟这种竞争状况?
请看下面的命令: bash -c "echo x; cat 1" | tee 1。 我的理解是,它将分叉到新的shell,写入xstdout,写入file 1 not foundstderr,退出并将控制权返回给父进程,以及写入xstdout和1。因此,我希望最终输出为x,并且该文件1正好包含string x。 然而,这种情况并非如此。实际上,文件1通常包含的至少两个实例x,有时包含数千行x。在运行命令一万次的批处理测试中,x写入文件的s 的平均数为52.3,中位数为1。什么概率分布可以模拟这种行为?我怀疑它是有条件的几何形状,否则是统一的。
10 shell  files  pipe 

4
PIPE使用的Bash退出状态
我试图了解使用管道时如何传达退出状态。假设我要which用来查找不存在的程序: which lss echo $? 1 由于which找不到位置,lss我的退出状态为1。这很好。但是,当我尝试以下操作: which lss | echo $? 0 这表明最后执行的命令已正常退出。我能理解的唯一方法是,也许PIPE也会产生退出状态。这是正确的理解方式吗?
10 bash  shell-script  pipe  exit 

2
三通会减慢管道的速度吗?
我想知道三通是否会减慢管道的速度。毕竟,将数据写入磁盘要比沿管道传输数据慢。 tee是否等待将数据发送到下一个管道,直到将其写入磁盘?(如果没有,我想Tee必须将已发送但未写入磁盘的数据排队,这对我来说似乎不太可能。) $ program1 input.txt | tee intermediate-file.txt | program2 ...
10 pipe  tee 

4
在传递到另一个命令之前完全缓冲命令输出?
有没有一种方法可以在没有临时文件的情况下只执行另一个命令?我有一个运行时间更长的命令,另一个具有格式化输出并使用curl将其发送到HTTP服务器的命令。如果我只是执行commandA | commandB,commandB将启动curl,连接到服务器并开始发送数据。因为commandA花费了很长时间,所以HTTP服务器将超时。我可以做我想做的事commandA &gt; /tmp/file &amp;&amp; commandB &lt;/tmp/file &amp;&amp; rm -f /tmp/file 出于好奇,我想知道是否有没有临时文件的方法。我尝试过,mbuffer -m 20M -q -P 100但是卷曲过程仍然在一开始就开始了。Mbuffer一直等到commandA实际发送数据完成为止。(数据本身最大只有几百kb)
10 shell  pipe  buffer 

2
如何使在相同管道中读取和写入相同文件始终“失败”?
说我有以下脚本: #!/bin/bash for i in $(seq 1000) do cp /etc/passwd tmp cat tmp | head -1 | head -1 | head -1 &gt; tmp #this is the key line cat tmp done 在关键行上,我读写同一文件tmp,有时会失败。 (我读这是因为竞争条件,因为管道中的进程是并行执行的,我不明白为什么-每个进程都head需要从上一个进程中获取数据,不是吗?这不是我的主要问题,但您也可以回答。) 当我运行脚本时,它输出大约200行。有什么方法可以强制此脚本输出始终为0行(因此tmp始终首先准备对I / O重定向,因此始终破坏数据)?需要明确的是,我的意思是更改系统设置,而不是更改此脚本。 感谢您的想法。

1
重定向stderr后,对bash脚本的输出进行配管[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 2年前关闭。 由于托管人的处理方式,我必须使用系统进行服务。 该服务有一个运行文件,它将执行该文件并将其传输到第二个运行文件中。但是我使用了一个(给定的)python程序包,该程序包记录到stderr而不是stdout,所以我无法让它做我想做的事情。 所以我有一个服务运行脚本: #!/bin/sh cd ~/webapp/PriceList exec python3.4 ~/webapp/PriceList/src/main.py 它通过管道传送到日志记录系统的运行中: #!/bin/sh exec multilog t ./main 但是管道没有连接stderr(如预期的那样)。因此,在谷歌搜索之后,我向运行添加了重定向: #!/bin/sh cd ~/webapp/PriceList exec python3.4 ~/webapp/PriceList/src/main.py 2&gt;&amp;1 但这不能解决我的问题:我自己的输出(使用pythons print输出到stdout)已按预期记录。stderr输出未记录。 如果将修改后的runscript重定向到两个文件中,则表明没有重定向(stderr仍在stderr上)。我必须如何修改重定向才能正常工作?

4
如何从管道读取用户输入?
假设我有一个文件confirmation.sh,其内容如下: #!/bin/bash echo -n "Are you sure [Y/n]? " read line case "$line" in n|N) echo "smth" ;; y|Y) echo "smth" ;; esac 并且我想通过以下方式运行此脚本: cat confirmation.sh | sh 我看到Are you sure [Y/n]?了,脚本被打断了。有什么问题?

3
如何使用逗号分隔列表作为下一个命令的参数
我有一个脚本s1,输出以','分隔的数字列表1,2,3,4。现在,我想将这些数字s2作为参数提供给脚本,以便s2将在每个数字上运行并在单独的行中输出其结果。例如,如果s2将数字乘以2,这就是我要查找的结果: 2 4 6 8 我现在正在做的是: s1 | xargs -d "," | xargs -n1 s2 但是我觉得我这样做是愚蠢的!所以我的问题是: 正确的做法是什么? 我的解决方案的问题在于,它两次调用xargs并两次对输入进行迭代,这当然对我来说是不合理的。答案xargs -d "," -n1似乎不错,但我不确定是否只重复一次。如果是这样,请在您的回答中确认这一点,我会接受。顺便说一句,我宁愿不使用Perl,因为它仍在迭代两次,而且Perl在许多系统上可能不存在。
9 pipe  xargs  arguments 

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.