sudo 在 bash 脚本中显示输入的密码

And*_*ndy 3 script sudo bash

我有一个使用sudo了几次的 bash 脚本。不过,它有一些奇怪的地方。

  1. 在我为上一个命令输入密码后,它会在几秒钟内询问我的密码。
  2. 我第二次输入密码时,它会回显到显示屏上。

这是脚本的相关部分。

sudo service apache2 stop
drush sql-dump --root="$SITE_DIR" --structure-tables-key=svn --ordered-dump | grep -iv 'dump completed on' | sudo tee "$DB_DIR/${SITE_NAME}.sql" > /dev/null
sudo svn diff "$DB_DIR" | less
sudo svn commit -m "$MESSAGE" "$DB_DIR"
sudo service apache2 start
Run Code Online (Sandbox Code Playgroud)

第一个密码是停止apache,它按预期工作。如前所述,sudo tee它不“记得”我有提升的权限,再次要求输入密码,然后将其回显到屏幕上。鉴于这完全tee是关于回显到屏幕,我已经使用了一些简单的脚本,这些脚本具有| sudo tee,并且它们都按预期工作。

编辑: 我查看了drush命令本身,它是一个 bash 文件,它使用exec. 这听起来可能有潜力 - 有什么想法吗?这是来自drush.

exec php $SCRIPT_PATH --php=`which php` "$@"
Run Code Online (Sandbox Code Playgroud)

Edit2: 正在查找与 Ruby 脚本有关的内容,并发现了这篇关于从 serverfault 中提升脚本权限的帖子

Bob*_*bby 8

我可以建议另一种解决方案吗?停止sudo在 bash 脚本中使用,而是使用提升的权限运行整个脚本。

您可以轻松检查脚本是否以 root 身份运行:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "$0 must be run as root"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

取自this SO question