【发布时间】:2016-09-13 23:18:27
【问题描述】:
我为我的 Mac (10.11 El Capitan) 编写的所有 bash 命令都运行良好,但它们在运行完成时会抛出错误。因此,例如,如果我这样做:
cat /usr/local/bin/en-deploy
你可以看到我写了这个脚本:
#Bash
#!/bin/sh
curl ec2-14-43-7-17.compute-1.amazonaws.com:10000 -d $1;
这个脚本很好用,但是当我调用它时,我得到:
Your branch is up-to-date with 'origin/master'.
: command not foundeploy: line 3:
第一行是预期的输出。第二行很奇怪。我需要做什么才能摆脱它?
更新:
如果我将文件编辑为:
#!/bin/bash
curl ec2-54-173-70-97.compute-1.amazonaws.com:30000 -d $1;
我明白了:
-bash: /usr/local/bin/en-deploy: /bin/bash^M: bad interpreter: No such file or directory
【问题讨论】:
-
顶部的#Bash 没有意义。 shebang 行 (#!) 必须是第一行,并且应该指向您要使用的内容。在 OSX 上应该是
#!/bin/sh(在 OSX 上是 bash) -
我的猜测是您已经在 Windows 环境中创建了脚本。如果是这样,请使用
dos2unix myScript.sh删除麻烦的\r字符。祝你好运。 -
顺便说一句,如果您使用
#!/bin/sh启动脚本,则它不是 bash 脚本,而是 POSIX sh 脚本。 Bash 脚本需要以#!/bin/bash开头。 -
@CharlesDuffy:许多系统将
/bin/sh设为/bin/bash的符号链接,因此脚本可能会或可能不会由 bash 执行。另一方面,bash 进入POSIX 模式,如果它被调用为sh。 -
@KeithThompson,即使它是一个符号链接,最终效果是完整的 bash 语言不可用,并且它不适合执行“bash 脚本”(正如 OP 在问题标题中所指的那样)。