bash / shell 스크립트 종속성 검사


13

bash 스크립트의 종속성을 확인하는 방법 / 명령이 있습니까? 다시 말해,이 질문에 대한 응답 : 스크립트를 실행하기 위해 사용자는 어떤 라이브러리를 설치해야합니까?

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

답변:


8

엄청나게 신비로운 autoconf 시스템

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

이것이 충분히 두려운 것이 아니라면 첫 번째 autoconf 스크립트를 작성할 때까지 기다리십시오. autoconf의 저자 는 어려움에 대해 부끄러워하지 않습니다 .

Autoconf를 이해하지 못하는 사람들은 Autoconf를 재발 명하지 않습니다. Autoconf의 기본 목표는 사용자의 삶을 편하게 만드는 것입니다. 관리자의 삶을 더 편하게 만드는 것은 이차적 인 목표 일뿐입니다. 다시 말해서, 기본 목표는 패키지 관리자를 위해 자동으로 구성을 생성하지 않는 것입니다. 오히려, 목표는 각 자동 충돌 패키지의 최종 사용자에 대해 구성이 고통스럽고 이식 가능하며 예측 가능하도록 만드는 것입니다. 그리고이 정도까지 Autoconf는 그 목표에서 매우 성공적입니다. Autoconf 목록에 대한 대부분의 불만은 결과 구성의 동작이 아니라 Autoconf 입력을 작성하는 데 어려움이 있다는 것입니다.

다른 한편으로, 당신은 상상했던 것보다 다양한 시스템의 끔찍한 비트에 대해 더 많이 아는 과정에서 나올 것입니다.

요즘 개인적으로는 훨씬 더 표준적인 데비안 배포판이 나의 목표였으며 다른 autoconf 스크립트를 작성하지는 않을 것입니다. 나는 그것을 선택할 수있는 사치를 가지고 운이 좋다. 그러한 위도를 가지고 있지 않을 수 있습니다.


3

스크립트는 정적 분석을 무효화하는 구문을 사용할 수 있기 때문에 자동화하는 간단한 작업이 아닙니다. 이제까지 사용하는 경우 eval또는 같은 접두어 timenice,이 같은 실행 한 간단하지 않습니다 egrep -o '^[^ ]+ ? '얻을 수있는 명령을하고를 통해 실행 which하거나 type.

결국, 절대적으로 확신 할 수있는 유일한 방법은 스크립트를 실행하고 실패한 것을 찾는 것입니다. 스크립트가 제대로 작성된 경우 실행하기 전에 비표준 명령을 확인합니다. 그렇지 않은 경우 시행 착오 만이 확실한 방법입니다.

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

#!/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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.