以下のスクリプトを実行して、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
接頭辞SIG
を削除し、信号名を入力するだけです。
trap "rm -f -- "$lock_file"" INT TERM
すべてのシェルがSIG
接頭辞を持つ入力を理解/取得するわけではありません。sh
(おそらくdash
を使用している)はその1つです。
一方、ksh
、bash
、zsh
などのより機能豊富なシェルでは、信号名の前にSIG
プレフィックスを付けることができます。