shell脚本中的\ r字符

Moh*_*han 14 shell

尝试执行shell脚本时出现以下错误,

$'\r': command not found: line 2:
Run Code Online (Sandbox Code Playgroud)

请为此建议一个解决方案.

以下是脚本中使用的初始行,

#!/bin/sh

if [[ $# -lt 1 ]]; then
   echo "ERROR Environment argument missing <dev,test,qa,prod>"
   export RC=50
   exit $RC
fi
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 24

您的问题是该文件具有Windows行结尾.这可能是由于在Windows中编辑文件并尝试在非Windows系统上运行它.

您可以使用dos2unix转换行结尾来解决此问题:

dos2unix ConstruedTermsXMLGenerator.sh
Run Code Online (Sandbox Code Playgroud)

在另一个方向转换的相应实用程序是unix2dos.

有些系统有fromdostodos.


小智 13

我使用记事本++来转换行尾。

编辑> EOL 转换> UNIX/OSX 格式


小智 9

您可以使用 sed -i 's/\r$//' scriptname.sh

将scriptname替换为实际的脚本名称.


sar*_*old 1

在 下运行脚本时,我收到了不同的错误消息/bin/sh,但是当我切换到 时/bin/bash,它工作正常:

$ cat foo.sh
#!/bin/sh
if [[ $# -lt 1 ]];
    then echo "ERROR Environment argument missing"
    RC=50
    exit $RC
fi
$ sh foo.sh
foo.sh: 6: [[: not found
$ bash foo.sh
ERROR Environment argument missing
Run Code Online (Sandbox Code Playgroud)

你已经建立了一种羞怯主义。这对您的组织来说可能是大事,也可能不是大问题。如果您想继续使用bash- 特定功能,请将 shebang 行更改为#!/bin/bash并查看是否有帮助。