标签: pipe

使用管道将两个参数传递给命令

通常,我们只需要传递一个参数:

echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
Run Code Online (Sandbox Code Playgroud)

有没有办法传递两个参数?就像是

{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Run Code Online (Sandbox Code Playgroud)

我可以先将两个结果存储在一个文件中

echo abc > file1
echo xyz > file2
cat file1 file2
Run Code Online (Sandbox Code Playgroud)

但是我可能会不小心覆盖一个文件,这是不行的。这是进入一个非交互式脚本。基本上,我需要一种方法来将两个任意命令的结果传递给cat而不写入文件。


更新:抱歉,该示例掩盖了问题。虽然{ echo abc ; echo xyz ; } | cat似乎确实有效,但输出是由于echos 而不是cat.

一个更好的例子是{ cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,它不能按预期工作。

file1:
a,b …
Run Code Online (Sandbox Code Playgroud)

bash shell-script pipe command-line-arguments bash-scripting

27
推荐指数
1
解决办法
5万
查看次数

为什么这不起作用?"ls *.txt | xargs cat > all.txt"(将所有文件合并成单个txt文档)

为什么这不起作用?

ls *.txt | xargs cat > all.txt
Run Code Online (Sandbox Code Playgroud)

(我想将所有文本文件的内容加入一个“all.txt”文件中。) find 与 -exec 也应该可以工作,但我真的很想了解 xargs 语法。

谢谢

cat xargs pipe

23
推荐指数
1
解决办法
4万
查看次数

在 Windows 中,我可以将标准输出重定向到命令行中的(命名)管道吗?

有没有办法将Win32 控制台中进程的标准输出重定向到命名管道?命名管道内置于 Windows 中,虽然它们是一个有用的概念,但我从未见过它们从命令行使用。

IE。喜欢example.exe >\\.\mypipe。(此语法可能不正确,但您明白了。)我希望能够同时将stdoutstderr重定向到不同的管道。

我想避免使用物理文件作为替代,以避免处理 IO 缓慢、IO 缓冲区、文件锁、访问权限、可用硬盘空间、决定覆盖、无意义的持久性等。

另一个原因是因为传统的 Windows工具集不像在 Unix 中那样围绕基于(文本)文件的哲学设计。此外,命名管道不能轻易安装在 Windows 中,如果有的话。

最后,好奇一个好的概念是否可以得到很好的使用。

windows redirection command-line pipe named-pipe

23
推荐指数
2
解决办法
3万
查看次数

为单个管道命令设置 pipefail

我需要从非 BASH 脚本(即 PHP 脚本)执行许多管道 shell 命令,如下所示:

command1 | command2 | command3
Run Code Online (Sandbox Code Playgroud)

所以,如果 command1以非零退出代码失败,则每个其他命令也会失败。到目前为止,我想出的是:

set -o pipefail && command1 | command2 | command3
Run Code Online (Sandbox Code Playgroud)

但即使它从终端运行良好,如果从脚本执行它也会产生这个:

sh: 1: set: 非法选项 -o pipefail

linux shell command-line pipe

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

linux管道符号“|”是什么意思 做?

这是一个以相反顺序对文件夹中的文件进行排序的命令

ls | sort -r
Run Code Online (Sandbox Code Playgroud)

有什么作用 |该命令符号有?

我在这里真正寻找的是 Linux 初学者对管道的高级(易于理解)解释。我在 Superuser 上看到了有关管道的其他问题,但没有任何答案可以简单地解释它们的作用以及它们与重定向(><符号)的区别。

linux bash command-line pipe

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

cat'ing 文件和管道到 grep 的优点

除了方便之外,对文件进行分类并将其通过管道传送到 grep 是否还有其他优势?方便之处在于,当我从历史记录中检索如下命令时,光标位于行尾,因此很容易修改具有不同文本的命令以针对同一文件进行 grep。

那么以下约定还有哪些其他优点:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main
Run Code Online (Sandbox Code Playgroud)

代替:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 
Run Code Online (Sandbox Code Playgroud)

linux unix grep command-line pipe

21
推荐指数
4
解决办法
4万
查看次数

使管道以非空返回为条件

有没有办法将一个函数的输出通过管道传输到另一个函数,但前提有输出?

bash pipe

21
推荐指数
4
解决办法
2万
查看次数

在powershell中的管道上使用-replace

我想在使用之前测试一个替换,所以我正在尝试编写一个快速的在线命令来查看输出是什么。但是,我不确定语法是什么。我想做的是

cat file | -replace "a", "b"
Run Code Online (Sandbox Code Playgroud)

什么是正确的 powershell 语法?

我知道我也可以做$a = cat file然后在 上进行替换$a,但我想将其保留在一行上

powershell cat find-and-replace pipe

21
推荐指数
2
解决办法
3万
查看次数

ls 输出中文件名之间的魔术分隔符是什么?

ls(不带参数)的输出似乎用换行符分隔文件名。

证据:

  • ls | grep foo按预期工作,grep将每个文件名视为单独的输入行。

  • ls > files.txt; vim files.txt --> 在 Vim 中,每个文件都在单独的一行

然而在终端中,输出ls将多个文件放在一行上,用空格分隔文件名以形成很好对齐的列:

$ ls
a.txt  b.txt  c.txt
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,ls 如何做到这一点?

是否使用一些特殊的控制字符来“伪造”换行符?或者它是否知道它的输出何时通过管道传输到另一个命令,并在这种情况下以不同的方式格式化输出?

ls pipe newlines

20
推荐指数
2
解决办法
5624
查看次数

`bash` 选项中的最后一个“-”(连字符)是什么意思?

本教程中,我们需要执行以下命令:

# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Run Code Online (Sandbox Code Playgroud)

-后面的最后一个(连字符)bash是什么意思?

我已经看到了很多与此相关的命令,但找不到合乎逻辑的解释,也找不到如何重新制定谷歌搜索的方法。它是管道命令的输出吗?

linux bash command-line pipe

19
推荐指数
3
解决办法
3179
查看次数