명령은 셸에서는 작동하지만 스크립트에서는 작동하지 않습니다.

명령은 셸에서는 작동하지만 스크립트에서는 작동하지 않습니다.

내가 사용하고 있는 Python 프로그램에 필요한 출력을 제공하는 이 git 스크립트가 있습니다. 문제는 스크립트를 사용해야 하는 Debian 7 시스템에서 스크립트가 작동하지 않는다는 것입니다. 그러나 내 Manjaro PC에서는 문제 없이 실행됩니다.

#!/bin/bash

branch=$1

if [[ -n "$branch" ]]; then

format=Author:%x09%an
format+=%x0aDate:%x09%ad
format+=%x0aRefs:%x09%d
format+=%x0a%x0a'%w(,4)%s'
format+=%x0a%x0a'%w(,4,4)%b'
git rev-list --pretty="$format" $branch
else
    echo "argument error"
fi

내가 직접 명령을 입력해도 작동합니다.

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

편집: 내가 얻는 첫 번째 오류는 2 [[. 이를 변경하면 if [ -n "$branch" ];모든 줄에 대해 "찾을 수 없음" 오류가 발생하는 형식 선언이 계속됩니다. 그러나 git rev-list 명령은 작동하지만 매개변수가 없어 실패합니다.

편집 2: bash [script]대신 스크립트를 실행하면 sh [script]문제가 해결됩니다 ! 내 Manajaro 컴퓨터에서 왜 작동하는지 아직도 궁금합니다 sh.

답변1

shManjaro 설치의 셸이 구문이나 변수 값에 추가하는 데 사용되는 구문을 dash이해하지 못할 수도 있습니다 .[[ ... ]]+=

sh이는 를 사용하는 대신 를 사용하여 스크립트를 실행할 때 스크립트의 특정 줄이 올바르게 실행되지 않는 이유를 설명합니다 bash.

#!이를 완화하려면 해시뱅 라인( )이 올바른 경로를 가리키는지 확인 bash하고 스크립트를 실행 가능하게 만드세요 chmod +x scriptname.sh. 이렇게 하면 eg ./scriptname.sh를 사용하라고 명시적으로 지시하지 않고도 eg를 사용하여 스크립트를 실행할 수 있습니다 bash.

관련 정보