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
できます。bash
zsh
SIG