首页 > 解决方案 > 以 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

标签: bash

解决方案


推荐阅读