标签: pipe

多个 unix 管道不工作

第一个管道工作正常(打印“c”):

echo "a" | sed 's/a/b/' | sed 's/b/c/'
Run Code Online (Sandbox Code Playgroud)

这个不符合我的预期(当我将“a”输入到我的 fifo 中时没有打印任何内容):

mkfifo fifo;
cat fifo | sed 's/a/b/' | sed 's/b/c/' 
Run Code Online (Sandbox Code Playgroud)

但是,如果我从后一个管道中删除第二个“sed”命令,则会打印“b”。我认为我对管道和重定向的理解太简单了。有人可以向我解释如何解决第二种情况,以便我可以对 fifo 的内容运行两个连续的命令吗?

(请注意,这不是特定于 fifo 的问题,netcat 也会出现相同的行为。我发布了一个关于 netcat的类似问题,但没有得到答案)

unix netcat pipe fifo

7
推荐指数
1
解决办法
801
查看次数

管道 grep 退出代码

当我需要抑制某种输出时,例如

foo | grep -v bar
Run Code Online (Sandbox Code Playgroud)

但 foo 有时只给出:

bar
bar
bar...
Run Code Online (Sandbox Code Playgroud)

grep 将返回 -1。如何将退出代码 1 转换为 0?

grep pipe exit

6
推荐指数
1
解决办法
4586
查看次数

将程序通过管道传输到 less

我正在深入设置和学习 git,同时学习 bash。我正在尝试做一些简单的事情,如查看帮助部分

$ git config
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我输入帮助时,帮助的输出会从屏幕上消失。做一些谷歌搜索,我发现我想用来滚动的程序较少。

我试过

$ git config | less
Run Code Online (Sandbox Code Playgroud)

没有成功。有任何想法吗?谢谢!

bash stderr less pipe stdout

6
推荐指数
2
解决办法
7779
查看次数

如何通过管道在Ubuntu中按列对ls进行排序?

我是一名 Linux 新手,试图了解管道在 Ubuntu 终端中的工作原理。我尝试按文件大小排序:

ls -al | sort -k5
Run Code Online (Sandbox Code Playgroud)

这些文件按以下顺序列出:

drwx------ 19 min10 domain users      0 2010-10-07 12:38 .
drwx------ 29 min10 domain users      0 2010-02-16 22:30 MSI
drwx------  2 min10 domain users      0 2009-11-25 19:53 www
drwx------  2 min10 domain users      0 2010-02-05 09:14 .cache
drwx------  2 min10 domain users      0 2010-03-02 08:11 My Pictures
drwx------  2 min10 domain users      0 2010-03-02 10:41 regu
drwx------  2 min10 domain users      0 2010-03-31 13:08 elec
drwx------  2 min10 domain users …
Run Code Online (Sandbox Code Playgroud)

ls sorting pipe ubuntu

6
推荐指数
2
解决办法
1万
查看次数

在 Windows 7 上嗅探进程通信

我有两个本地进程进行通信以让其他进程执行命令。我想知道他们在说什么。

经过一些初步调查,它不是通过Sockets或Loopback,但似乎它们正在使用(named-)pipes(至少两者都打开了其中的一些,不能说它们是否相同)。

如何嗅探这些进程之间的所有通信?

windows-7 sniffing process pipe

6
推荐指数
1
解决办法
9101
查看次数

cat-ing 文件到 unix 管道会导致 Matlab 冻结

我在 Debian 上使用 mkfifo pipe.in. 我想从 Matlab 写入这个管道。

为此,我使用以下 matlab 命令:

unix( 'cat <myfile> > pipe.in' )
Run Code Online (Sandbox Code Playgroud)

哪里<myfile>是文本文件,pipe.in是我用mkfifo.

在许多情况下,与管道关联的进程因多种原因崩溃(但除了使用 unix 和 cat 命令之外的任何原因)。在几种情况下,崩溃可能是正常的。

执行上述命令导致 Matlab 冻结,我无法重新获得控制权CTRL+C

有没有另一种方法可以在不需要我终止进程的情况下发布 Matlab?

unix matlab pipe

6
推荐指数
1
解决办法
756
查看次数

在bash中使用两个命令读取相同的stdin

我想将 bash 中的两个单独命令 <2,3> 的输出通过管道传输。这样做的最佳方法是什么?目前,我有以下脚本:

command source > output
command2 output &
command3 output &
Run Code Online (Sandbox Code Playgroud)

输出文件大约为 100G,一种次优的方式是分别通过管道传输到命令 2 和 3。我认为有可能做得更有效。

bash pipe

6
推荐指数
1
解决办法
5390
查看次数

管道在 Windows 7 上的 cmd.exe 中不起作用

我开始看到一些非常奇怪的问题,管道命令在我的机器上的 Windows 7 64 位上不起作用。像这样的命令:

 echo test | more  
Run Code Online (Sandbox Code Playgroud)

过去可以正常工作,但现在它们失败并显示以下错误消息:

'.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' is not recognized as an internal or external command, operable program or batch file.  
Run Code Online (Sandbox Code Playgroud)

管道左侧和右侧的内容似乎也无关紧要,任何带有管道的命令行指令都会失败。如果管道的右侧根本不是正确的可执行文件,它似乎也没有什么区别。

例如,以下都表现出相同的失败行为:

type file1 | findstr blah
dir | thisdoesnotexist
Run Code Online (Sandbox Code Playgroud)

一周前所有这些都运行良好,我不确定会发生什么变化。在它停止工作时可能发生了 Windows 更新,但我不确定。

我的%PATH%%PATHEXT%环境变量看起来也不错。它们的内容如下所示:

Path=C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;
C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\;
C:\Programs\WinMerge;
C:\Programs\TortoiseHg\;
C:\Programs\MySQL\MySQL Server 5.1\bin;
C:\Programs\Aldec\Active-HDL 9.1\bin;
C:\Programs\Tcl\bin;
C:\Programs\modeltech_pe_10.0b\win32pe;
C:\Programs\Atlassian\atlassian-plugin-sdk-3.2.3\bin; …
Run Code Online (Sandbox Code Playgroud)

windows-7 command-line pipe

6
推荐指数
1
解决办法
6269
查看次数

带有彩色输出的 grep 返回几个空行

我对 grep 有奇怪的问题(2.12-2,debian 测试)。

在某些情况下,当我执行以下操作时: grep -rni '."spacer">.' .grep 返回几行空行:

在此处输入图片说明

如果我添加--color=none所有行变得可见。

.bashrc 中的 grep 选项:

export GREP_COLORS='fn=01;34:ms=01;33:ln=33'
alias grep='grep --color=auto'
Run Code Online (Sandbox Code Playgroud)

linux bash grep pipe

6
推荐指数
1
解决办法
1281
查看次数

使用选择字符串管道过滤输出

在 bash 中,如果我执行以下操作,我将获得其中的所有环境变量wd

env | grep "wd"
Run Code Online (Sandbox Code Playgroud)

现在,在 Powershell 中,我知道我可以做到

get-childitem env:wd*
Run Code Online (Sandbox Code Playgroud)

但是我想通过管道将 select-string 作为一种更通用的方法,以便过滤来自管道的内容,无论管道左侧是什么。就像 grep 一样。

这不会过滤任何东西,我得到了所有的环境变量。

get-childitem env: | out-string | select-string -Pattern wd
Run Code Online (Sandbox Code Playgroud)

这让我一无所获:

get-childitem env: | select-string -Pattern "wd"
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容,如果我只过滤环境变量的名称,它实际上是一个更好的匹配。但是如果我想要一个快速而肮脏的过滤器呢?尤其是,不知道从管道进来的东西的属性。

get-childitem env: | where-object {$_.Name -like "wd*"}
Run Code Online (Sandbox Code Playgroud)

即是否有等效于grep的 Powershelll可在管道上下文中使用,而不仅仅是在文件搜索的上下文中,这select-string似乎覆盖得很好。

powershell pipe powershell-5.0

6
推荐指数
1
解决办法
8323
查看次数