为什么 sudo 每次在 bash 脚本中都需要第二次输入密码?

为什么 sudo 每次在 bash 脚本中都需要第二次输入密码?

我有一个简单的非常小的 Web 应用程序,并且希望通过一个非常简单的部署脚本使我的生活变得更轻松,该脚本执行以下操作:

  1. 从 git 拉取更新
  2. 运行 Composer
  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!"

这样,脚本只会要求您输入一次密码。

相关内容