Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将sh脚本输出重定向到两个日志,一个带有-x,另一个不带-x_Linux_Bash - Fatal编程技术网

Linux 将sh脚本输出重定向到两个日志,一个带有-x,另一个不带-x

Linux 将sh脚本输出重定向到两个日志,一个带有-x,另一个不带-x,linux,bash,Linux,Bash,是否可以运行一次脚本并将其写入两个日志。一个日志将是详细的,并将有-x选项的输出。另一个日志不会详细说明,只有常规输出,没有-x选项?set-x有一个奇妙的功能,它的输出实际上不是打印到stdout,而是打印到stderr 因此,如果你有 myscript.bash 1> log 2> xlog 使用脚本中的set-x,因此log包含常规输出和xlog调试命令的输出、+和错误 如果您想要一个包含所有输出的文件,并且只有一个常规输出,那么这可能会更加困难,我认为需要在最后编辑日志。下

是否可以运行一次脚本并将其写入两个日志。一个日志将是详细的,并将有-x选项的输出。另一个日志不会详细说明,只有常规输出,没有-x选项?

set-x
有一个奇妙的功能,它的输出实际上不是打印到
stdout
,而是打印到
stderr

因此,如果你有

myscript.bash 1> log 2> xlog
使用脚本中的
set-x
,因此
log
包含常规输出和
xlog
调试命令的输出、
+
和错误

如果您想要一个包含所有输出的文件,并且只有一个常规输出,那么这可能会更加困难,我认为需要在最后编辑日志。下面是一个包装器脚本,它接受另一个要运行的脚本:

#!/bin/bash

set -x
. $1 &> full.log
set +x
sed '/^+.*/d' full.log > out.log
你在哪里打电话

wrap.sh myscript.sh

这样做的缺点是,任何以
+
开头的行都会被删除,这可能是不够的。使用进程替换可能有更好的解决方案,但我想不出一种方法可以保持
stdout
stderr
之间的顺序。您可以基于一些布尔值编写一个函数,用于记录日志。你所说的
-x
是什么意思?