要将stdout重定向到Bash中的截断文件,我知道要使用:
cmd > file.txt
Run Code Online (Sandbox Code Playgroud)
要在Bash中重定向stdout,追加到文件,我知道要使用:
cmd >> file.txt
Run Code Online (Sandbox Code Playgroud)
要将stdout和stderr重定向到截断的文件,我知道要使用:
cmd &> file.txt
Run Code Online (Sandbox Code Playgroud)
如何重定向附加到文件的stdout和stderr?cmd &>> file.txt不适合我.
我做了一个pipline
command1 | command2
Run Code Online (Sandbox Code Playgroud)
因此,command1的stdout进入command2,而command1的stderr进入终端(或shell的stdout所在的地方).
command3当stdout仍然要命令2时,如何将command1的stderr传递给第三个进程()?
我知道
program1 | program2
Run Code Online (Sandbox Code Playgroud)
和
program1 | tee outputfile | program2
Run Code Online (Sandbox Code Playgroud)
但有没有办法将program1的输出提供给program2和program3?
在数据库备份过程中,我生成一个文本转储文件.由于数据库非常庞大,转储文件也很庞大,所以我用gzip压缩它.生成转储时压缩是内联完成的(感谢Unix管道!).
在进程结束时,我通过观察最后一行来检查转储文件的有效性,并检查"转储完成"字符串的存在.在我的脚本中,我通过将最后一行提取到变量中来实现:
str=`zcat ${PATHSAVE}/dumpFull.sql.gz | tail -n1`
Run Code Online (Sandbox Code Playgroud)
由于数据库转储文件很大(目前超过200Gb),因此最终进程检查需要花费大量时间(目前超过180分钟).
我正在寻找一种方法来快速提取我的.gz文件的最后一行...任何人都有想法?
注1:对于解释上下文,我们可以说数据库是MySql社区,备份工具是mysqldump,生成的dumpfile是一个全文文件.操作系统是CentOs.备份脚本是Bash shell脚本.
注意2:我知道Percona xtraBackup,但在我的情况下,我想使用mysqldump进行这个特定的备份工作.恢复所需的时间不是问题.
我想在管道输入上运行2个命令,并希望打印(到stdout)两者的输出.
每个命令都是grep,sed和awk的组合.
这两个命令都必须位于单个.sh文件中.
示例命令:
cat mult_comm.sh
sed 's/World/Boy/g'|grep Boy ; grep World
# Input
cat input.log
Hello World
# This command HAS to work EXACTLY like this
cat input.log | bash mult_comm.sh
Run Code Online (Sandbox Code Playgroud)
预期产出
Hello Boy
Hello World
Run Code Online (Sandbox Code Playgroud)
实际输出
Hello Boy
Run Code Online (Sandbox Code Playgroud)
我尝试过使用三通
cat mult_comm.sh
tee >(sed 's/World/Boy/g'|grep Boy) | grep World
Run Code Online (Sandbox Code Playgroud)
但这只是给出了
Hello World
Run Code Online (Sandbox Code Playgroud)
我可以根据需要修改.sh文件,但无法更改管道命令.有任何想法吗?
这与OS X/Linux类似:管道分为两个进程?和管道输出到两个不同的命令,但我无法弄清楚如何在脚本中使用命名管道.
我需要对程序的标准输出流做两件事:比如说,将它导入两个管道,或者将它打印到终端并将其导入管道。但是 - 这些东西都没有将它定向到文件中。
如果我想要一个管道 + 一个文件,我会使用tee命令:myprog | tee out.txt | another_command,如解释here。但是如果这两个操作都没有写入文件呢?