我将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脚本应该能够支持换行符和标签。
感谢。
答案 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 all
或unix
,则应该看到fileformat=dos
。然后保存文件。
CR会在线的末端弄乱反斜杠,因为反斜杠不再位于线的末端;他们之后是回车,这不是换行符。