我已经在我的一个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格式。