bashシェルスクリプトがトラップを使用してこれらのクリーンアップを実行するとします。
#!/bin/bash
cleanup() {
sudo umount /mnt
}
trap cleanup EXIT
sudo mount /mnt
#do long running stuff like sleep 3600
上記のスクリプト(常に指定した設定によって異なります/etc/sudoers
)は、ユーザーのパスワードだけでなくクリーンアップmount
にも使用されますumount
。 「sudo権限がロードされました」などのトラップを設定する方法はありますか?つまり、ユーザーパスワードを再入力する必要はありません。
理想的には、sudoを介してスクリプト全体を実行してこれを実行しないでください。exec sudo "$0" "$@"
または同様です。可能な場合にのみ特権で実行されるようにトラップを設定する方法が必要です。
ベストアンサー1
trap
以下を使用する代わりに:
#! /bin/sh -
sudo mount /mnt || exit
{
(
sleep 3600
) 3>&1 >&4 4>&- | sudo sh -c 'cat>/dev/null; umount /mnt'
} 4>&1
メソッドは、パイプが閉じられたとき、つまりパイプ内のサブシェルが終了したときにすぐにsudo sh...
開始されます。sudo mount
umount
sleep
mount
また、一般ユーザーが、またはオプションでマウントできることが/mnt
わかります。詳細については、mount(8)とマニュアルページを参照してください。/etc/fstab
user
group
users
owner
fstab(4)