首页 > 解决方案 > 长路径触发错误 bash 输出,如果循环错误

问题描述

运行以下代码时出现错误。如果我从 $file1 grep 则脚本不起作用。如果我从 $file2 grep 则脚本正在运行。

$file1 和 $file2 都具有相同的权限和相同的内容。但是为什么我从 $file1 grep 时收到错误消息?这里有语法错误吗?

#./test.sh
./test.sh: line 23: $'true\r': command not found


$ cat /tmp/file.conf
random=true
abac
daccda
qwerty=
aewwrwr=false

脚本

file1="/app/some/directory/apache-tomcat-9.0.10/webapps/DESDv2.0/WEB-INF/classes/file.conf"
file2="/tmp/file.conf"

findfile=` grep "random" $file1 | awk -F = '{print $2}' `


if $findfile;then
echo "enabled";
else
echo "disabled";
fi

实际输出

$ ./test.sh
./test.sh: line 23: $'true\r': command not found

预期产出

$ ./test.sh
enabled

标签: bashshellscripting

解决方案


我认为你的 file1 和 file2 是不同的。要检查它,只需键入:

cksum $file1 $file2

它们应该产生相同的长度和相同的校验和。如果不是,它们是不同的。

我进一步猜想你的两个文件有不同的行尾约定: file1 有 DOS 行尾(2 字节行尾, ie ),而 file2 有 Unix 行尾(单字节行尾, ie )。

当您在编辑器中打开它们时,它们可能看起来是相同的。事实上,行尾表示是不同的。Unix 对其他字符的处理方式相同,因此有了这个额外的字符,'true' 变成了 'true\r',它找不到名为 'true\r' 的命令。


推荐阅读