bash EXITトラップにsudoパスワードプロンプトが表示されるのを防ぐ方法は?

bash EXITトラップにsudoパスワードプロンプトが表示されるのを防ぐ方法は?

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 mountumountsleep

mountまた、一般ユーザーが、またはオプションでマウントできることが/mntわかります。詳細については、mount(8)とマニュアルページを参照してください。/etc/fstabusergroupusersownerfstab(4)

おすすめ記事