我在脚本中有以下内容:
#!/bin/bash
logFile='script.log'
echo -n > $logFile
log="tee -a $logFile"
set -x
scp ... user@host:...
ssh user@host "
echo '...message...'
" 2>&1 | $log
{ set +x ;} 2> /dev/null # avoids trace output of '++ set +x'
输出是:
++ ssh user@host '
echo '\''> ...message...'\''
'
++ tee -a script.log
> ...message...
++ tee ...
跟踪线也可以以某种方式被抑制吗?
答案1
您可以仅对适当的命令启用跟踪,而不是对整个管道进行跟踪。多命令管道中的每个命令都在其自己的子 shell 执行环境中运行(当该lastpipe
选项有效时,Bash 中的最后一个命令除外),并且set
可以对每个命令应用不同的选项。
例如,稍微概括一下你的代码,没有+tee
打印出来
$ set -x; echo foo | tee; { set +x; } 2>/dev/null
+ echo foo
+ tee
foo
一个简单的方法可能是
$ { set -x; echo foo; } | tee
+ echo foo
foo