“设置:非法选项 – ”在一个主机上,但不是另一个

我已经在我的一个ubuntu虚拟机中编写了一个sh脚本,但是当我尝试在其他虚拟机中运行它时,它不起作用。 两个虚拟机应该是一样的。 用bash --version这两个虚拟机回复:

 GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 

lsb_release -a ,两者都回复:

 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Codename: trusty 

我的security_steps.sh脚本如下所示:

 #!/bin/sh set -e if ! [ -f svn_up_action.sh ]; then echo "svn_up_action.sh is missing. Please make sure it is in the same directory as this script." exit fi 

当我这样做: sudo sh security_steps.sh ,控制台错误与:

 : not foundeps.sh: 6: security_steps.sh: security_steps.sh: 7: set: Illegal option - 

我怎样才能弄清楚非工作shell的虚拟机是怎么回事? 我觉得炮弹有点不同 我感谢您的帮助!

这几乎肯定意味着你的文件具有DOS换行符 – 因此,最后是隐藏的CR字符。

因此, set -e变为set -e$'\r' (使用特定于bash的语法来表示CR字符),这不是一个有效的选项。

这也解释了: not found ,因为CR会将光标重置到行的开头,截断形式为sh: commandname: not found的错误消息sh: commandname: not found通过将commandname sh: commandname: not found而不是通过将光标移动到开头的操作线。

我有* .sh文件扔在Windows上运行它(通过GitBash)。

我不得不将行结尾更改为UNIX / OSX格式。