Bash/셸 스크립트 종속성을 확인하세요.

Bash/셸 스크립트 종속성을 확인하세요.

Bash 스크립트의 종속성을 확인하는 방법/명령이 있습니까? 즉, 사용자가 스크립트를 실행하려면 어떤 라이브러리를 설치해야 합니까?라는 질문에 답하십시오.

스크립트를 읽고 호출하는 다른 라이브러리/명령을 확인하여 이 작업을 수동으로 수행할 수 있지만 긴 스크립트에서는 이것이 명확하지 않습니다.

답변1

놀라운 미스터리자동 구성 시스템이미 익숙해졌어

소프트웨어 소스 코드 패키지를 자동으로 구성하는 쉘 스크립트를 생성합니다. 이러한 스크립트는 수동 사용자 개입 없이 광범위한 UNIX 유사 시스템에 패키지를 적용할 수 있습니다. Autoconf는 M4 매크로 호출 형식으로 패키지에서 사용할 수 있는 운영 체제 기능을 나열하는 템플릿 파일에서 패키지의 구성 스크립트를 만듭니다.

그것이 충분히 무섭지 않다면, 첫 번째 autoconf 스크립트를 작성하려고 시도할 때까지 기다리십시오. autoconf 작성자그 어려움을 부끄러워하지 마세요:

Autoconf를 이해하지 못하는 사람들은 Autoconf를 나쁘게 재창조할 운명에 처해 있습니다. Autoconf의 주요 목표는 사용자의 삶을 더 쉽게 만드는 것입니다. 유지관리자의 삶을 더 쉽게 만드는 것은 두 번째 목표입니다. 즉, 주요 목표는 패키지 관리자가 자동으로 구성을 생성하도록 하는 것이 아닙니다. 대신, 우리의 목표는 모든 최종 사용자가 자동화된 패키지 압수 구성을 쉽고 이식 가능하며 예측 가능하게 만드는 것입니다. 이러한 의미에서 Autoconf는 그 목표에 매우 성공적입니다. Autoconf 목록에 대한 대부분의 불만은 최종 구성의 동작보다는 Autoconf 입력 작성의 어려움에 관한 것입니다.

반면에, 그 과정에서 당신은 상상했던 것보다 다양한 시스템의 복잡성에 대해 더 많이 배우게 될 것입니다.

요즘 개인적으로 나는 또 다른 autoconf 스크립트를 작성하기보다는 좀 더 표준적인 데비안 스타일의 배포판을 만드는 것이 나의 목표라고 생각합니다. 나는 이런 선택을 할 수 있는 특권을 누릴 수 있어서 행운입니다. 당신에게는 그런 자유가 없을 수도 있습니다.

답변2

스크립트가 정적으로 분석할 수 없는 구성을 사용할 수 있으므로 이는 간단한 자동화 작업이 아닙니다. or와 같은 접두사가 붙은 or를 사용한 적이 있다면 eval명령을 가져와서 or를 통해 실행하는 것과 같은 작업을 실행하는 것만큼 간단하지 않습니다.timeniceegrep -o '^[^ ]+ ? 'whichtype

결국, 절대적으로 확신할 수 있는 유일한 방법은 스크립트를 실행하고 실패한 이유를 알아내는 것입니다. 스크립트가 잘 작성되어 있으면 실행하기 전에 비표준 명령이 있는지 확인합니다. 그렇지 않다면 시행착오를 통해 확실히 알 수 있는 유일한 방법입니다.

그렇다면 다음과 같은 것이 도움이 될 수 있습니다.

#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
    while read line
    do
        if type $line &>/dev/null
        then
            echo "$line found"
        else
            echo "Error: $line not found"
        fi
    done
} | sort

출력은 다음과 같습니다.

$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found

답변3

다음을 사용하여 폴더에서 .sh 파일 목록을 가져올 수 있습니다.

find \ordnerpfad -type f

.sh 파일에서 명령 목록을 가져오는 방법을 찾으면 다음을 통해 시스템이 해당 명령을 지원하는지 확인할 수 있습니다.

compgen -ac | grep searchstr

.sh 파일에서 사용되는 명령 목록을 얻으려면 다음 형식 중 하나를 통해 얻을 수 있습니다.작동하지 않는 샘플:

스크립트에서 사용하는 명령 목록을 출력합니다. 다음에서 사용하는 명령 목록을 생성할 수 있습니다.

설정 -n file_which_need_to_check.sh > find_commands.txt

또는 다음을 통해:

compgen -c file_which_need_to_check.sh >found_commands.txt

또는 다음을 통해:

shellcheck -x 또는 이와 유사합니다:

https://www.shellcheck.net/
https://github.com/koalaman/shellcheck

이 점을 개선해 주시기 바랍니다.

관련 정보