programing

Bash 스크립트를 실행하지 않고 구문을 확인하려면 어떻게 해야 합니까?

iphone6s 2023. 5. 17. 22:34
반응형

Bash 스크립트를 실행하지 않고 구문을 확인하려면 어떻게 해야 합니까?

실행하지 않고 bash 스크립트 구문을 확인할 수 있습니까?

Perl을 사용하여 실행할 수 있습니다.perl -c 'script name'bash 스크립트에 해당하는 명령이 있습니까?

bash -n scriptname

아마도 명백한 경고일 것입니다. 이것은 구문을 검증하지만 bash 스크립트가 경로에 없는 명령을 실행하려고 하는지 확인하지 않습니다.ech hello대신에echo hello.

시간은 모든 것을 바꿉니다. 스크립트에 대한 온라인 구문 검사를 제공하는 웹 사이트입니다.

일반적인 오류를 감지하는 것이 매우 강력하다는 것을 알게 되었습니다.

여기에 이미지 설명 입력

셸 검사 정보

ShellCheck는 sh/bash 스크립트를 위한 정적 분석 및 린트 도구입니다.주로 셸이 암호화된 오류 메시지나 이상한 동작을 제공하는 일반적인 초급 및 중급 수준 구문 오류와 함정을 처리하는 데 중점을 두지만, 코너 케이스가 지연된 실패를 야기할 수 있는 몇 가지 고급 문제에 대해서도 보고합니다.

Haskell 소스 코드는 GitHub에서 사용할 수 있습니다!

또한 추가 검사를 수행하기 위해 작성하는 모든 bash 스크립트에서 'u' 옵션을 활성화합니다.

set -u 

다음 스크립트 'check_init'과 같이 초기화되지 않은 변수의 사용을 보고합니다.쉬'

#!/bin/sh
set -u
message=hello
echo $mesage

스크립트 실행:

$ check_init.sh

다음을 보고합니다.

./check_init.sh[4]: 메시지:매개 변수가 설정되지 않았습니다.

오타를 잡는 데 매우 유용합니다.

sh  -n   script-name 

이걸 실행합니다.스크립트에 구문 오류가 있으면 동일한 오류 메시지를 반환합니다.오류가 없으면 메시지를 주지 않고 나옵니다.다음을 사용하여 즉시 확인할 수 있습니다.echo $?돌아올 것입니다.0실수 없이 성공을 확인하는 것.

저한테는 잘 맞았습니다.리눅스 OS, Bash Shell에서 실행했습니다.

실제로 현재 dir에 있는 모든 bash 스크립트에서 구문 오류가 있는지 확인합니다.find도구:

예:

find . -name '*.sh' -print0 | xargs -0 -P"$(nproc)" -I{} bash -n "{}"

단일 파일에 사용하려면 파일 이름으로 와일드카드를 편집하면 됩니다.

null 명령 [dll]은 변수의 값을 확인하기 위해 디버깅할 때도 유용합니다.

set -x
for i in {1..10}; do
    let i=i+1
    : i=$i
done
set - 

구문의 유효성만 검사하는 경우:

검사 [programPath]

구문이 통과한 경우에만 프로그램을 실행하는 경우, 구문과 실행을 모두 디버깅합니다.

셸프루프 [programPath]

구문 검사를 사용하도록 설정한 경우 Bash 셸 스크립트가 구문 검사를 실행합니다.

set -o noexec

구문 검사를 해제하려면

set +o noexec

구문을 확인하는 IntelliJ IDEA용 BashSupport 플러그인이 있습니다.

변수에 디렉터리의 모든 파일(git 사전 커밋 후크, 빌드 린트 스크립트)의 유효성이 필요한 경우 변수에서 "sh-n" 또는 "bash-n" 명령의 stderr 출력(다른 답변 참조)을 포착하고 이를 기반으로 "if/else"를 가질 수 있습니다.

bashErrLines=$(find bin/ -type f -name '*.sh' -exec sh -n {} \;  2>&1 > /dev/null)
  if [ "$bashErrLines" != "" ]; then 
   # at least one sh file in the bin dir has a syntax error
   echo $bashErrLines; 
   exit; 
  fi

필요에 따라 "sh"를 "bash"로 변경

언급URL : https://stackoverflow.com/questions/171924/how-do-i-syntax-check-a-bash-script-without-running-it

반응형