為什麼 bash 腳本中的 sudo 每次都需要密碼?

為什麼 bash 腳本中的 sudo 每次都需要密碼?

我有一個簡單的非常小的網頁應用程序,並且希望透過一個非常簡單的部署腳本讓我的生活變得更輕鬆,該腳本執行以下操作:

  1. 從 git 拉取更新
  2. 運行作曲家
  3. 更改所有文件的所有者

該腳本基本上運行良好,如下所示:

#!/bin/bash
echo "Updating repository ...";
sudo git pull;

echo "Installing composer dependencies from lockfile ...";
composer install;

echo "Changing owner to www-data:www-data ...";
sudo chown -R www-data:www-data .;

echo "Deployment DONE!";

但是,正如您所看到的,我在此腳本中以 sudo 身份運行了兩個命令。即git pullchown

我的問題如下:我知道使用 sudo 運行命令時系統詢問我密碼的頻率有超時。問題是,即使我在超時之內,腳本總是要求輸入密碼第二sudo (chown) 指令。

有人可以請啟發我,為什麼會出現這種情況?

答案1

我真的不知道是什麼原因,但有解決方案:

if [[ $(id -u $(whoami)) != 0 ]]
then
    sudo bash $( cd $(dirname $0) ; pwd -P )
    # taken from http://stackoverflow.com/a/4774063/2797066
else
    #rest of script
fi

答案2

為什麼不sudo這樣運行腳本:

sudo bash /path/to/script.sh

其中script.sh有以下內容但沒有sudo

#!/bin/bash
echo "Updating repository ...";
git pull;

echo "Installing composer dependencies from lockfile ...";
composer install;

echo "Changing owner to www-data:www-data ...";
chown -R www-data:www-data .;

echo "Deployment DONE!"

這樣腳本只會要求您輸入密碼 1 次。

相關內容