シェルスクリプトのパスワードは1回だけ入力してください

シェルスクリプトのパスワードは1回だけ入力してください

既存のパッケージを一度にすべて更新およびアップグレードするためのシェル スクリプトを作成しました。スクリプトは次のとおりです。

#!/bin/bash
sudo apt-get update;
sleep 10;
sudo apt-get upgrade;
sleep 10;
sudo youtube-dl -U;
sleep 10;
sudo shutdown -h now;
exit 0

私が直面している問題は、インターネット接続がそれほど速くないため、3 番目のコマンドに到達するまでにパスワード セッションが期限切れになり、パスワードを再入力する必要があることです。また、そのためにはずっと PC の前にいなければなりませんが、これではスクリプトの目的が達成されません。

そこで私の質問は:

パスワードを変数に保存し、毎回sudo変数からパスワードを入力することで、ずっとコンピュータの近くにいなくても済む方法はありますか? (または、私が望むことを実現する同様の方法はありますか)

このようなもの:

#!/bin/bash
printf "Please enter your password: ";
read -s password
sudo apt-get update;
$password
sleep 10;
sudo apt-get upgrade;
$password
sleep 10;
sudo youtube-dl -U;
$password
sleep 10;
sudo shutdown -h now;
$password
exit 0

答え1

スクリプト内のコマンドから sudo を削除し、実際のスクリプトを root として実行します。例:

#!/bin/bash
apt-get update;
sleep 10;
apt-get upgrade;
sleep 10;
youtube-dl -U;
sleep 10;
shutdown -h now;
exit 0

そしてそれを実行するsudo ./my-script.sh

答え2

これにより、パスワードを一度入力するだけで済みます。apt-getコマンドについては、以下では、-y以外のすべてに対して「プロンプトに対して自動的にはい」というフラグが設定されていますdist-upgrade

sudo bash -c "apt-get -y update && apt-get dist-upgrade && youtube-dl -U && apt-get -y autoremove && apt-get -y autoclean && shutdown -h now"

関連情報