Я запускаю приведенный ниже скрипт для автоматической загрузки файлов с сервера с использованием 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
ln -s /etc/passwd /tmp/$base_name.lock
или эквивалентного?Ответы:
Удалите
SIG
префикс, просто введите имя сигнала:Не все оболочки понимают / принимают ввод с
SIG
префиксомsh
(предположительно, вы используетеdash
) - один из них.С другой стороны, более богатые возможностей оболочки , как
ksh
,bash
,zsh
позволяетSIG
префикс перед именем сигнала.источник
#!
строки для ссылкиbash
вместоsh
.dash
, а? Я не слышал об этой скорлупе раньше ...