这是我的myscript.sh
:
alias apt-get-update="apt-get update -qq"
alias apt-get-install="apt-get install -f -y -qq --force-yes"
alias yum-install="yum --quiet --nogpgcheck -y install"
function ensure_cmd_or_install_package_apt(){
local cmd=$1
shift
local pkg=$*
hash $cmd 2>/dev/null || ( apt-get-update && apt-get-install $pkg )
}
当我运行sh myscript.sh
时,我得到:
myscript.sh: 5: myscript.sh: Syntax error: "(" unexpected
对我来说,它看起来很完美;任何想法?
答案 0 :(得分:1)
答案 1 :(得分:1)
另外一般来说,您应该在脚本标题中明确指出要运行脚本的app / shell:
#!/bin/bash
如果脚本需要bash-isms,那么你应该告诉它使用bash运行。
在你的情况下,你在ubuntu(确认)和ubuntu使用短划线作为默认shell(即/ bin / sh是一个符号的符号链接)。 Dash不允许:
function name () {}
而只是想:
name () {}
事实上,如果可能的话,应该避免使用第一种形式,因为它不便携。但是如果你使用function关键字,不要使用parens,因为它们不是必需的(它甚至可以发生意外)。
关于设置脚本标题,有时最好使用env来查找程序(例如在ruby或perl的情况下,例如你可能有许多ruby / perl可执行文件,但你路径上最远的那个是你想要经营的那个)。
#!/usr/bin/env ruby
是要走的路。通常对于shell,/ bin / bash或/ bin / csh等在你的shebang中就足够了,但绝不假设:)。