我有一个使用sudo
了几次的 bash 脚本。不过,它有一些奇怪的地方。
这是脚本的相关部分。
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)
我可以建议另一种解决方案吗?停止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)