bash - 以 sudo 执行时,进程替换显示语法错误
问题描述
我有 bash shell 并将脚本放在一个文件中。当我在没有 sudo 的情况下运行它时,它执行得很好。当我以超级用户身份运行它时,它给了我错误
[root@gums01 rotate_logs]# sudo ./rotate_logs.sh
./rotate_logs.sh: line 47: syntax error near unexpected token `<'
./rotate_logs.sh: line 47: `done < <(find $LOGS_PATH/ -maxdepth 1 -mtime +$FILES_OLDER_THAN_DAYS -type f \( -name "gums-app.log_*.log" \) -print0)'
这是shell脚本的部分内容。我尝试了很多文章,但无法理解为什么以超级用户身份运行时会弹出此错误。请忽略您在下面看到的变量。这些已经在同一个文件中定义。
FILES_OLDER_THAN_DAYS=30
files=()
while IFS= read -r -d $'\0'; do
files+=("$REPLY")
done < <(find $LOGS_PATH/ -maxdepth 1 -mtime +$FILES_OLDER_THAN_DAYS -type f \( -name "gums-app.log_*.log" \) -print0)
name=$(date --date="-$FILES_OLDER_THAN_DAYS day" '+%Y-%m-%d_%H:%M:%S')
if (( ${#files[@]} )); then
echo "[Time: $(date)] Making tar of GUMS log files older than $FILES_OLDER_THAN_DAYS days." >> $SCRIPT_LOG
tar cfz "$LOGS_PATH/zippedLogs/backup_$name.tar.gz" "${files[@]}";
echo "[Time: $(date)] Removing GUMS log files older than $FILES_OLDER_THAN_DAYS days from local" >> $SCRIPT_LOG
find $LOGS_PATH/ -maxdepth 1 -mtime +$FILES_OLDER_THAN_DAYS -type f \( -name "*gums-app.log_*.log" \) -exec rm -f {} \;
set_month_folder_id $LOG_GDRIVE_FOLDER_ID
echo $target_folder_id >> $SCRIPT_LOG
echo "[Time: $(date)] Uploading tar of log file to Google Drive" >> $SCRIPT_LOG
$MY_PATH/gdrive upload $LOGS_PATH/zippedLogs/backup_$name.tar.gz -p $target_folder_id >> $SCRIPT_LOG
echo "[Time: $(date)] Removing local tar file" >> $SCRIPT_LOG
rm -rf $LOGS_PATH/zippedLogs/*;
else
echo "[Time: $(date)] No GUMS log found older than $FILES_OLDER_THAN_DAYS days" >> $SCRIPT_LOG
fi
解决方案
推荐阅读
- vue.js - 如何使用 vue-tel-input 的事件?
- sql - 将日期显示中具有多行的两个表合并为另一个表中的一行
- javascript - 如何根据给定的过滤器返回并获取对象属性的总和?
- python - 部署使用多个 python 文件的 Python 函数
- swift - 如何在 iOS 13 共享表中实现“选项”
- javascript - JavaScript 或 Jquery 如何在字符串中拆分 url
- c - 如何搜索有关 C 编程的问题和内容
- mongodb - 如何在gcp VM上远程访问mongodb的gcp端口?
- spring - Spring Boot 在 messages.properties 中使用占位符
- mysql - 使用 VBA 将 mySQL 数据库中的值提取到 Excel 中