/bin/sh: '모듈'에 대한 함수 정의를 가져오는 동안 오류가 발생했습니다.

/bin/sh: '모듈'에 대한 함수 정의를 가져오는 동안 오류가 발생했습니다.

지금 스크립트가 있지만 항상 오류라고 표시됩니다.

stderr=/bin/sh: module: line 1: syntax error: unexpected end of file /bin/sh: error importing function definition for기준 치수''

#!/bin/sh
#
# pgp.sh
# Script to take PGP Command Line 6.5.8 (Freeware) output from PGPPackageService
# or PGPUnpackageService and execute the appropriate GnuPG commands 
#
if [ "$9" = "-se" ]
then MODE="encrypt_and_sign"
fi
if [ "$9" = "-e" ]
then MODE="encrypt_only"
fi
if [ "$8" = "-o" ]
then MODE="decrypt"
fi
#
case "$MODE" in
    "encrypt_and_sign")
        #
        # Logic for encrypt and sign
        #
        if [ "$6" = "+armor=on" ];
            then
                OPTIONS='--armor '$OPTIONS
        fi
        if [ "$7" = "+textmode=on" ];
            then
                OPTIONS='--textmode '$OPTIONS
        fi
        PASS=${15}
        OUTFILE=${17}
        USER=${13}
        REMOTE=${11}
        INFILE=${10}
        #Original script from Bryce
        #echo "$PASS" | "gpg $OPTIONS --no-tty --output $OUTFILE --passphrase-fd 0 -u $USER -r $REMOTE --sign --encrypt $INFILE"
        #script from Tyn, removed --passphrase-fd 0 and echo and double quotes
        #03252015: Tyn: Added --trust-model always for newly imported keys to be usable
        /usr/bin/gpg --trust-model always $OPTIONS --no-tty --output $OUTFILE -u $USER -r $REMOTE --sign --encrypt $INFILE

    ;;
    "encrypt_only")
        #
        # Logic for encrypt
        #
        if [ "$6" = "+armor=on" ];
            then
                OPTIONS='--armor '$OPTIONS
        fi
        if [ "$7" = "+textmode=on" ];
            then
                OPTIONS='--textmode '$OPTIONS
        fi
        OUTFILE=${13}
        REMOTE=${11}
        INFILE=${10}
        #original script from Bryce
        #echo "$PASS" | "gpg $OPTIONS --no-tty --output $OUTFILE --passphrase-fd 0 -r $REMOTE --encrypt $INFILE"
        #script from Tyn, removed --passphrase-fd 0 and echo and double quotes
        #03252015: Tyn: Added --trust-model always for newly imported keys to be usable
        /usr/bin/gpg --trust-model always $OPTIONS --no-tty --output $OUTFILE -r $REMOTE --encrypt $INFILE
    ;;
    "decrypt")
        #
        # Logic for decrypt
        #
        PASS=${7}
        OUTFILE=${9}
        INFILE=${5}
        #Original script from Bryce
        #echo "$PASS" | "gpg --no-tty --output $OUTFILE --passphrase-fd 0 --decrypt $INFILE"
        #script from Tyn, removed --passphrase-fd 0 and echo and double quotes
        #03252015: Tyn: Added --trust-model always for newly imported keys to be usable
        /usr/bin/gpg --trust-model always --no-tty --output $OUTFILE --decrypt $INFILE
    ;;
esac

답변1

귀하의 환경에 다음과 같이 내보낸 함수가 손상된 것 같습니다(함수에 세미콜론과 닫는 중괄호가 없음).

$ env "BASH_FUNC_foo%%"="() {  echo foo" bash -c "echo blah"
bash: foo: line 1: syntax error: unexpected end of file
bash: error importing function definition for `foo'
blah

Bash는 환경을 통해 함수를 내보내고 거기에서 자동으로 읽습니다. 물론 구문 오류가 있으면 불평합니다. 처음에도 이렇게 합니다 sh. 이는 다음과 같은 간단한 스크립트를 실행할 때 동일한 오류가 발생한다는 것을 의미합니다.

#!/bin/sh
echo hello

이와 같은 것을 사용하여 환경에 무엇이 있는지 확인할 수 있습니다 env | grep module(접두사 BASH_FUNC_와 접미사가 %%다를 수 있음). 그런 다음 해당 환경 변수가 설정된 위치를 찾아야 합니다. 그러나 Bash 스크립트에서 이를 설정하는 것은 %쉘 변수 이름에 유효한 문자가 아니기 때문에 다소 어렵습니다.

관련 정보