私のスクリプトには次のものがあります。
#!/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
パイプライン全体を追跡するのではなく、適切なコマンドに対してのみトレースを有効にできます。マルチコマンドパイプラインの各コマンドは、独自のサブシェル実行環境で実行されます(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