셸 함수는 첫 번째 인수만 사용합니다.

셸 함수는 첫 번째 인수만 사용합니다.

저는 Linux의 새로운 설치를 사용자 정의하고 apt-get install을 실행하는 여러 부분을 포함하는 스크립트를 작성 중입니다. 연결에 문제가 있어 가끔 작동이 중지되어 apt-get이 실패할 수 있으며, 그런 일이 발생하면 스크립트는 다른 명령을 계속 처리합니다.

다음 스크립트는 작동하지만 이제 또 다른 문제가 있습니다. 예를 들어 함수를 내보내면 aptinstall firefox firefox-locale-en나열된 첫 번째 패키지만 설치됩니다.

최대 5번 실패하면 재시도하는 함수에서 apt-get이 실행되도록 스크립트를 수정했습니다.

# Install package - will retry download if connection fails up to 5 times and abort if unsuccessful
function aptinstall (){
local __pkg=$1
    set +x
    n=0
    until [ $n -ge 5 ]
    do
        apt-get install -y $__pkg && break
        n=$[$n+1]
        sleep 15 # Wait 15 seconds before trying to download and install packages again
    done
    if [ "$n" -eq 5 ]; then
        echo >&2 "An error has occurred. Please check your network connection."
        exit 1
    fi

첫 번째 패키지만 설치되는 이유를 알아내도록 도와줄 수 있는 사람이 있나요? 감사해요!

답변1

$1use 를 사용하는 대신 "$@".

지역 변수 __pkg는 필요하지 않습니다. 내 생각에는 이것이 스크립트를 불필요하게 복잡하게 만든다고 생각합니다.

나는 또한 당신이 $[expression]산술 평가를 사용하고 있다는 것을 알았습니다. 이 구문은 더 이상 사용되지 않습니다. 를 사용하는 것이 좋습니다 $((expression)). 예를 들어, n=$((n+1)).

이는 귀하의 질문 범위를 벗어나지만 apt-get시간 초과 문제가 있는 경우 이를 방지하기 위한 로컬 미러 설정과 같은 솔루션을 조사하는 것이 좋습니다.

관련 정보