예를 들어 간단한 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 = 연산자 스크립트 = 파일 이름
도움이되기를 바랍니다.