bash,将管道命令视为捕获输出的命令

时间:2013-10-10 09:01:19

标签: bash pipe

假设我在bash中有一组管道命令:

mysqldump mydatabase  |   head -1100   | tail -n 100   

将其视为一个命令的正确/最佳方法是什么,因此我可以捕获输出。

我尝试将命令括在反引号中(正如我所理解的那样打开一个新的shell,这似乎是不必要的),但是出现了错误。

`mysqldump mydatabase  |   head -1100   | tail -n 100 ` > output.txt  


error mysqldump: Got errno 32 on write

不确定错误是否与bash命令或mysql有关(在添加反引号之前它有效)。

无论如何,我更感兴趣的是我如何将管道命令视为一个/组来捕获它们。

3 个答案:

答案 0 :(得分:2)

左手命令的stdout充当右手命令的标准输出,因此mysqldump mydatabase | head -1100 | tail -n 100 > output.txt应该有效。

如果你真的要“说清楚”,这应该有效。 ( mysqldump mydatabase | head -1100 | tail -n 100 ) > output.txt

答案 1 :(得分:2)

您的行中的每个命令都会获取一些输入并返回一个输出,因此您可以将其视为传递数据的链。

如果您希望结果显示在控制台中,您只需编写

即可
mysqldump mydatabase | head -1100 | tail -n 100

否则将其存档,您将输出重定向到文件,如此

mysqldump mydatabase | head -1100 | tail -n 100 > output.txt

More info about redirection

答案 2 :(得分:1)

您可以使用pipes来查找行号的各个部分,而不是创建两个sed

    mysqldump mydatabase | sed -n '1000,1100p' > output.txt