
때로는 추가하는 것이 정말 편리합니다.
set -x
실행 전에 모든 명령을 표시하려면 스크립트 상단으로 이동하세요.
좋은 출력을 가진 스크립트를 만드는 데에는 단 한 가지 단점이 있습니다. 이런 식으로 스크립트에 텍스트 출력을 추가하는 방법을 모르겠습니다. 내가 사용한다면
echo 'some comment'
이렇게 하면 인쇄가 두 배가 됩니다.
+ echo 'some comment'
some comment
사용해보면 #
전혀 나오지 않습니다.
와 같이 인쇄되는 주석을 추가하는 방법은 무엇입니까 echo
? 을 사용하면 어떻게 되나요 set -x
?
답변1
영리한 접근 방식은 주석을 no-op 명령에 대한 인수로 작성하는 것입니다. 특히 유용할 수 있는 사항은 다음과 같습니다.:
빈 유틸리티:
set -x
: Some interesting notes on the following are ...
결과 :
+ : Some interesting notes on the following are...
콜론 명령은 아무 작업도 수행하지 않고 사용자가 제공하는 모든 인수를 허용하며 항상 성공합니다. :
추적 출력 시작 부분에서 추가 정보를 얻을 수 있지만 이는 아마도 사용자의 목적에 있어서 큰 문제는 아닐 것입니다 .
이것이 마음에 들지 않으면 :
더 나쁜 방법은 가짜 명령을 사용하는 것입니다.
set -x
seq 1 1
Some comment &>/dev/null
true
다음을 출력합니다:
+ seq 1 1
1
+ Some comment
+ true
즉, Some comment
쉘이 라인을 실행하려고 하면 라인이 추적 출력으로 인쇄되지만 결과 오류 메시지는 로 전송됩니다 /dev/null
. 이는 여러 가지 명백한 이유로 짜증나는 일이지만 . 오류 set -e
.
두 경우 모두 귀하의 주석은 일반적인 방법으로 쉘에 의해 구문 분석되므로 특히 특수 문자가 있는 경우 이를 인용해야 하며 추적 출력이므로 인용문이 표시됩니다.
답변2
디버깅 정보를 인쇄하려면 "set -x"를 사용하지 말고 대신 별도의 디버깅 기능을 사용하세요.
#!/bin/bash
DEBUG=1
debug() {
if [ $DEBUG == 1 ]
then
echo "DEBUG:" $@
fi
}
debug "foo bar"
스크립트를 실행하면 다음이 생성됩니다.
temeraire:ul jenny$ ./testdebug.sh
DEBUG: foo bar
할당을 read 로 변경하면 DEBUG=0
해당 행이 인쇄되지 않습니다.
답변3
스크립트를 디버깅하는 데 사용 했는데 set -x
해결책만 찾았습니다.@MichaelHomer가 제안했습니다.그것은 이점을 취한다빈 유틸리티(일명. : ..some comment...).
보다 효율적인 솔루션으로 이동할 준비가 되면 실제 로거를 사용하여 스크립트를 구현하는 것이 좋습니다.log4Bash
.
예
#!/usr/bin/env bash
source log4bash.sh
log "This is regular log message... log and log_info do the same thing";
log_warning "Luke ... you turned off your targeting computer";
log_info "I have you now!";
log_success "You're all clear kid, now let's blow this thing and go home.";
log_error "One thing's for sure, we're all gonna be a lot thinner.";
# If you have figlet installed -- you'll see some big letters on the screen!
log_captains "What was in the captain's toilet?";
# If you have the "say" command (e.g. on a Mac)
log_speak "Resistance is futile";
결과:
답변4
:
아무 작업도 수행하지 않는 null 명령을 사용할 수 있습니다 .
: ::::::: your comment here
참고: 주석에 bash 특수 문자를 사용하지 마십시오. 그렇지 않으면 (, $, !, [, ...
여전히 해석됩니다.
더 읽기 쉽게 만들려면 +
settings 를 통해 원하는 문자열로 변경할 수 있습니다 PS4
. 예를 들면 다음과 같습니다.
PS4=": "; set -x