此问题在此处已有答案:
Are shell scripts sensitive to encoding and line endings?(14个答案)
2天前关闭。
我做了一个脚本,将运行作为一个cron任务,执行本身在5分钟的时间间隔。目标是让他读取日志文件,这是每天创建的,使用预定义的模式。它创建一个.flag文件,用于跟踪已经被读取,如果它匹配的模式,它运行一个.sh脚本重新启动服务。
我的bash脚本如下:
#!/bin/bash
LAST_POS_FILE="last_position.flag"
PATTERN='ERROR [pt.gsoft.oasis.platform.plugins.mediaconverter.ejb.messages.MediaConverterMDB]'
LOG_FILE='/var/local/log/server.log'
if [ ! -f "$LAST_POS_FILE" ]; then
echo 0 > "$LAST_POS_FILE"
fi
LAST_POS=$(cat "$LAST_POS_FILE")
CURR_LOG=$(date+"%Y-%m-%d")
if [ "$LOG_FILE.$CURR_LOG" -nt "$LOG_FILE" ]; then
LOG_FILE="$LOG_FILE.$CURR_LOG"
fi
if [[ "$LOG_FILE" -nt "$LOG_FILE" ]]; then
LINE=$(grep -E "$PATTERN" "$LOG_FILE" | awk -F: '{print $1}')
if [ -n "$LINE" ]; then
if [ "$LINE" -gt "$LAST_POS" ]; then
echo "$LINE" > "$LAST_POS_FILE"
./teste.sh
fi
fi
fi
# end of file #
我已经使用Jdoodle.com来指定错误是什么,它给了我这样的输出:
jdoodle.sh: line 2: $'\r': command not found
jdoodle.sh: line 4: $'\r': command not found
jdoodle.sh: line 6: $'\r': command not found
jdoodle.sh: line 8: $'\r': command not found
jdoodle.sh: line 35: syntax error: unexpected end of file
Command exited with non-zero status 2
我也尝试过使用dos2unix pkg,但没有成功。
编辑:复制了有错误的脚本
1条答案
按热度按时间e5nqia271#
因为你在其他操作系统上编辑你的文件,所以隐藏的换行符与linux不同。你可以尝试用途:
dos2unix {your_file_name}
转换格式。您可以使用
cat -E {your file}
查看隐藏的结束字符。通过
dos2unix <SCRIPT_FILE_NAME>
修复脚本行终止符。