"티" 추적선 인쇄 방지

"티" 추적선 인쇄 방지

내 스크립트에는 다음이 있습니다.

#!/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

답변2

고마워하는프라산~을 위한그의 대답그리고에드 모튼그의 의견질문.

log나는 함수와 오버로드에 대한 코드 줄이 더 적은 솔루션을 찾았습니다 .

log() {
  tee -a "$logFile"
  }

logFile='script.log'
> $logFile

{
set -x
scp ...
ssh ...
} 2>&1 | log

관련 정보