
既存のパッケージを一度にすべて更新およびアップグレードするためのシェル スクリプトを作成しました。スクリプトは次のとおりです。
#!/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"