这个bash脚本有什么问题?

时间:2014-07-22 15:35:34

标签: bash syntax-error

这是我的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

对我来说,它看起来很完美;任何想法?

2 个答案:

答案 0 :(得分:1)

正在运行bash myscript.sh吗?

可能是您的脚本在dash而不是bash中运行。

根据this answer,您可以使用以下命令进行更改:

chsh

答案 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中就足够了,但绝不假设:)。