'\\r': command not found [duplicate]

匿名 (未验证) 提交于 2019-12-03 02:38:01

问题:

This question already has an answer here:

echo "Select your option:" echo "1. Change ip address" echo "2. Add route" echo "3. Reboot" echo "4. Exit" read A case $A in     1)             echo "Add Ip address"             read IP             echo "Add Netmask"             read Netid             echo "Add name of interface"             read Interface             ifconfig ${Interface} ${IP}/${Netid}             if [ $? -ne 0 ];then                     echo "Ip address not configured"             fi             ;;     2)             echo "Add Destination"             read dst             echo "Add Netmask"             read Netid             echo "Add Gateway"             read gw             route add $dst mask $Netid gw $gw             if [ $? -ne 0 ];then                     echo "Route not added"             fi             ;;     3)             reboot             ;;     4)             echo "Bye"             exit 0             ;;     default)             echo "Wrong selection"             exit 1 esac 

Error:

[b104@b104 Downloads]$ ./NetworkUtility.sh  ./NetworkUtility.sh: line 1: $'\r': command not found Select your option: 1. Change ip address 2. Add route 3. Reboot 4. Exit 1 ': not a valid identifier 7: read: `A ./NetworkUtility.sh: line 8: $'\r': command not found ./NetworkUtility.sh: line 9: syntax error near unexpected token `newline' '/NetworkUtility.sh: line 9: `case $A in  [b104@b104 Downloads]$  

回答1:

It seems that you have Windows style line endings (\r\n) - you need to change them to unix style (\n). If you have dos2unix installed you could use it. You could also do it using sed or awk.



回答2:

Its End of Line(EOL) conversion issue when script is written in windows using some editors like notepad, notepad++(tested).

Sed , tr may solve the issue in case of you just need to run script, however if you are developing shell script its become annoying each time first convert using, sed/tr command then run your script.

Notepad++ has an option to convert END OF LINE CONVERSION(EOL). How to do that: go to Edit > EOL Conversion > select Unix/OSX

Here you go, save script file and run it.

Here is screenshot of the same



回答3:

The error happens, because shell doesn't understand DOS/Windows-like line endings and it expects LF instead of CRLF.

You'll need to first configure your editor to use Unix-like line endings or use dos2unix command to change it automatically, e.g.

dos2unix ./NetworkUtility.sh 

Read more details at: '\r': command not found.

If you're using Vagrant, check: Windows CRLF to Unix LF Issues in Vagrant



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!