Bash脚本中包含奇怪的特殊字符

时间:2012-09-14 04:34:34

标签: linux bash shell special-characters

我将bash脚本从PHP通过SSH2存储到CentOS服务器上;我知道这很复杂,但只是忍受我。

当我打开文件(在服务器上)时:

vi myScript

我明白了:

ls -al^M
free -m

所以,当我尝试执行它时:

bash myScript

输出引发错误:

ls: invalid option -- 
Try `ls --help' for more information.
         total       used       free     shared    buffers     cached
Mem:           676        642         34          0         33        313
-/+ buffers/cache:        295        380
Swap:          767          1        766

^M是什么以及它来自哪里? bash脚本应该能够支持换行符和标签。

感谢。

2 个答案:

答案 0 :(得分:5)

^ M是来自Windows的行尾。该文件最初是在Windows中创建的。您可以在vi中执行以下操作:1,$ s / ^ v ^ M // g删除它们。

此外,您可以在整个文件上使用dos2unix命令一次性清除它。您可以在执行脚本之前执行此操作。

答案 1 :(得分:3)

^M是CR或回车符。在某些地方,您的代码被CRLF行结尾污染,这通常在Windows机器上找到。此外,许多互联网协议使用CRLF线路结束。

要修复此问题,请在vim中修改该文件并使用:set fileformat=unix;如果您在将其更改为:set之前执行:set allunix,则应该看到fileformat=dos。然后保存文件。

CR会在线的末端弄乱反斜杠,因为反斜杠不再位于线的末端;他们之后是回车,这不是换行符。