SIGINT सिग्नल ट्रैप करने के लिए मुझे एक त्रुटि संदेश क्यों मिलता है?


12

मैं Lftp का उपयोग कर सर्वर से फ़ाइलों को स्वचालित रूप से डाउनलोड करने के लिए नीचे स्क्रिप्ट चला रहा हूं। यह काम करता है सिवाय इसके कि जब यह चलता है तो मुझे त्रुटि संदेश मिलता है

trap: SIGINT: bad trap

यदि मैं SIGINT और SIGTERM को INT और TERM से बदल देता हूं तो यह काम करता है, लेकिन मुझे नहीं पता कि क्या यह उसी उद्देश्य को प्राप्त करता है। यह लिनक्स डेबियन 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
यह कोड किस उपयोगकर्ता के रूप में चलता है? यदि कोई व्यक्ति शरारती ln -s /etc/passwd /tmp/$base_name.lockया समकक्ष बनाता है तो क्या होता है ?
प्रातः

जवाबों:


16

SIGउपसर्ग छोड़ें , बस संकेत नाम इनपुट करें:

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

सभी शेल SIGउपसर्ग के साथ इनपुट को नहीं समझते / लेते हैं , sh(संभवतः आप उपयोग कर रहे हैं dash) उनमें से एक है।

दूसरी ओर, अधिक समृद्ध गोले की तरह की सुविधा ksh, bash, zshअनुमति देने के SIGसंकेत नाम के सामने उपसर्ग।


धन्यवाद! यही मैंने कोशिश की; मैं सिर्फ यह सुनिश्चित करना चाहता था कि यह वही काम करे।
फ्लाइंग ऑक्ट

@flyingace आप अपनी #!लाइन को संदर्भ के bashबजाय बदलने पर भी विचार कर सकते हैं sh
रोएमा

का उपयोग कर dash, हुह? मैंने उस शेल के बारे में पहले नहीं सुना है ...
सेलेडमनीडे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.