假设我在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有关(在添加反引号之前它有效)。
无论如何,我更感兴趣的是我如何将管道命令视为一个/组来捕获它们。
答案 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
答案 2 :(得分:1)
您可以使用pipes
来查找行号的各个部分,而不是创建两个sed
mysqldump mydatabase | sed -n '1000,1100p' > output.txt