【问题标题】:How to get rid of 'command not found' from bash scripts on Mac OSX? [duplicate]如何摆脱 Mac OSX 上 bash 脚本中的“找不到命令”? [复制]
【发布时间】: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 在问题标题中所指的那样)。

标签: bash macos


【解决方案1】:

#!/bin/sh(或 Bash 的 #!/bin/bash)必须是脚本的第一行。并使用引号。

#!/bin/bash
curl 'ec2-14-43-7-17.compute-1.amazonaws.com:10000' -d "$1"

同时运行dos2unix script 以确保您的脚本是UNIX 文件格式。正如@shellter 在评论中指出的那样,您的脚本似乎不是 UNIX 格式。

注意:dos2unix script 将就地转换文件。

【讨论】:

  • 是的,但不是这里问题的原因;这显然是 DOS 换行符。
  • 另外,OP 专门询问了 bash,所以指向 #!/bin/bash 可能比 #!/bin/sh 更正确。
  • (回复:“一个好机会”,我想不出任何其他原因导致行首的:command not found,除了它是一个文字$'\r'正在运行的字符作为一个找不到的命令。你可以吗?)
  • @CharlesDuffy : 取消引用 $1 可能会导致意外行为..
  • ...在该位置未引用的$1 可以扩展为任意数量的参数,或者根本没有参数,但它扩展的任何内容仍然是@ 的命令行参数987654332@,不是生成“command not found”错误的新命令。
猜你喜欢
  • 1970-01-01
  • 2013-11-10
  • 2019-03-18
  • 2017-04-14
  • 2022-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多