我有一个.sh脚本,可以运行PostgreSQL DB的更改,并提供这些更改的报告。作为脚本的输出,会生成一个report.csv文件。服务器有多个用户,这些用户只允许读取该文件。在脚本结束时,我想压缩并存档它(.csv和.zip文件都是指定的结果)。这些指令需要使用sudo权限才能运行。我的问题是如何安排shell命令语义正确,使我尽可能少地使用sudo?
我不能以sudo的方式运行整个脚本,因为它使用psql访问,这会将运行数据库访问的用户更改为root。
#!/bin/bash
sudo chmod 440 /tmp/$REPORT_FILE
# Move to archive folder and rename
sudo mv /tmp/$REPORT_FILE/$ARCHIVE_DIR$/$REPORT_NAME
cd $ARHIVE_DIR
sudo zip ${REPORT_ZIP_NAME} {REPORT_NAME}
sudo chmod 440 ${REPORT_ZIP_NAME}
rm $REPORT_NAME
2条答案
按热度按时间pcww981p1#
为了将
sudo
调用限制为一个,你可以创建一个临时目录,做你的事情,然后移动文件:**旁注:**你应该总是用双引号括起你的var展开式;此外,使用大写的局部变量名是有风险的,因为它可能与外部或内置变量冲突(例如
REPLY
,SECONDS
等)。im9ewurl2#
一种常见的安排是将整个脚本作为
sudo
运行,但在运行完成后将其特权删除。set -e
是一个有点杂七杂八的东西,但我不想为每个需要特权访问的命令添加显式的错误检查。另请注意When to wrap quotes around a shell variable