bash 스크립트가 모든 명령을 실행하기 전에 인쇄하도록 만드는 방법은 무엇입니까? 실행하기 전에 모든

예를 들어 간단한 bash 파일이 있습니다.

#!/bin/bash
cd ~/hello
ls

명령을 실행하기 전에 모든 명령을 표시하려면 어떻게해야합니까? Windows 배치 스크립팅에서 “@echo off”의 반대 효과입니다.



답변

bash -x script

또는

set -x

스크립트에서.

으로 옵션을 다시 설정 해제 할 수 있습니다 set +x. 몇 가지 명령에 대해서만 수행하려면 서브 쉘을 사용할 수 있습니다.`(set -x; command1; command; …;)


답변

이것들은 또한 작동합니다 :

set -v

또는

#!/bin/bash -v

그러나 -v는 각 스크립트 행 앞에 PS4 문자열을 인쇄하지 않으며 “for”문의 단계 (예 :)를 개별적으로 추적하지 않습니다. -x는 주석을 에코하지 않지만 -x는 주석을 에코하지 않습니다.

-v를 사용하는 출력의 예는 다음과 같습니다.

#!/bin/bash -v
# this is a comment
for i in {1..4}
do
    echo -n $i
done
1234echo

echo hello
hello

-x를 사용한 동일한 스크립트의 결과는 다음과 같습니다.

+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo

+ echo hello
hello

-v와 -x의 차이점을 강조하기 위해 “echo -n”을 포함 시켰습니다. 또한 -v는 “-o verbose”와 동일하지만 후자는 shebang의 일부로 작동하지 않는 것 같습니다.


답변

이것은 또한 작동해야합니다 :

#!/bin/bash -x
cd ~/hello
ls

답변

이것은 작동해야합니다 :

set -o verbose #echo on
...
set +o verbose #echo off

답변

set -o xtrace그리고 set +o xtrace친구가 (이보다 더 장황하다 -o verbose, 그리고 STDOUT에 로그인 할 때 보이는 장황 반대로 출력, STDERR로 이동).

여기에 더 많은 팁을 보십시오


답변

몇 가지 방법이 있습니다.

#!/usr/bin/env bash -x

shebang 라인으로.

set -x스크립트 자체를 포함 하면 기능이 활성화되고 set +x비활성화됩니다. 이 두 가지 방법 모두 이식성이 뛰어난 sh 셸에서 작동합니다.

올바르게 기억한다면 perl에도 -x 옵션이 있습니다.


답변

처럼 간다

language -x script

언어 = 파이썬, 펄, bash -x = 연산자 스크립트 = 파일 이름

도움이되기를 바랍니다.