SIGINT 신호를 잡으려고 할 때 오류 메시지가 나타나는 이유는 무엇입니까?

SIGINT 신호를 잡으려고 할 때 오류 메시지가 나타나는 이유는 무엇입니까?

lftp를 사용하여 서버에서 파일을 자동으로 다운로드하기 위해 아래 스크립트를 실행하고 있습니다. 작동합니다. 실행하면 오류 메시지가 나타납니다.

trap: SIGINT: bad trap

SIGINT 및 SIGTERM을 INT 및 TERM으로 바꾸면 작동하지만 동일한 목적을 달성하는지 모르겠습니다. 이것은 Linux Debian 4.9.2-10에 있습니다.

#!/bin/sh
login="login"
pass="password"
host="server.server.com"
remote_dir='~/remote/dir'
local_dir="/local/dir"

base_name="$(basename "$0")"
lock_file="/tmp/$base_name.lock"
trap "rm -f $lock_file" SIGINT SIGTERM
if [ -e "$lock_file" ]
then
    echo "$base_name is running already."
    exit
else
    touch "$lock_file"
    /usr/bin/lftp -p 22 -u "$login","$pass" sftp://"$host" << EOF
    set sftp:auto-confirm yes
    set mirror:use-pget-n 5
    mirror -c -P5 "$remote_dir" "$local_dir"
    quit
EOF
    rm -f "$lock_file"
    trap - SIGINT SIGTERM
    exit
fi

답변1

접두사를 제거 SIG하고 신호 이름만 입력하세요.

trap "rm -f -- "$lock_file"" INT TERM

모든 쉘이 접두사가 붙은 input 을 이해/수용하는 것은 아닙니다 SIG( sh를 사용한다고 가정 dash)는 그 중 하나입니다.

반면에 와 같이 기능이 풍부한 셸에서는 신호 이름 앞에 접두사를 추가 ksh할 수 있습니다 .bashzshSIG

관련 정보