Linux 命令 dos2unix

文件在不同的操作系统之间传输导致的错误

Posted by Johnny on July 25, 2017

今天遇到一个奇怪的问题:运行一个很简单的shell脚本,脚本如下:

 /build/tools/ristretto quantize \
--model=models/SqueezeNet/train_val.prototxt \
 --weights=models/SqueezeNet/squeezenet_v1.0.caffemodel \
 --model_quantized=models/SqueezeNet/RistrettoDemo/quantized.prototxt \
 --trimming_mode=dynamic_fixed_point --gpu=0 --iterations=2000 \
 --error_margin=3

很简单一个脚本,只不过是执行一个可执行程序,输入一行参数,但是无论如何shell都会报错:

./examples/ristretto/00_quantize_squeezenet.sh: line 4: --model=models/SqueezeNet/train_val.prototxt: No such file or directory
./examples/ristretto/00_quantize_squeezenet.sh: line 5: --weights=models/SqueezeNet/squeezenet_v1.0.caffemodel: No such file or directory
./examples/ristretto/00_quantize_squeezenet.sh: line 6: --model_quantized=models/SqueezeNet/RistrettoDemo/quantized.prototxt: No such file or directory
./examples/ristretto/00_quantize_squeezenet.sh: line 7: --trimming_mode=dynamic_fixed_point: command not found
./examples/ristretto/00_quantize_squeezenet.sh: line 8: $'--error_margin=3\r': command not found

我仔细查看了报错说文件不存在的路径,发现路径是对的。我又怕路径写错了,所以专门一个字一个字核对路径,确认路径肯定是正确的。我甚至怀疑是因为我用的zsh的问题,所以又特意用bash运行这个脚本…… 我试了所有我能试的方法,但是shell依然还是报错。我试着不用shell脚本了,自己把命令一个字符一个字符敲进shell总不会报错了吧!结果很神奇,shell果然没有报错,顺利运行了。这是为什么呢?于是我把这几个错误分别粘到google里搜索,结果还真让我搜索到了,如下图: java-javascript 原因终于找到了,这个shell脚本是我从Windows下用FileZilla传到服务器上的,Windows自动在shell脚本文件后加入了换行符,但是Linux不认识这个换行符,所以才会报错。问题找到了,解决办法也就简单了。使用shell命令dos2unix这个命令把换行符去掉,使用格式如下:

dos2unix  filename

问题解决!The end!


// mathjax