OSX中的bash语法错误

德拉甘

在Linux上编写和测试的以下bash脚本在被调用时甚至无法在OS X上启动。

#!/bin/bash
#
#   Some comments
#
#
function usage {
    echo ""
    echo "Usage: thisscript <SOURCE_DIRECTORY> <TARGET_DIRECTORY>"
    echo ""
    echo "<SOURCE_DIRECTORY>    the directory where the this "
    echo "              directory resides (default is /usr/dis)"
    echo ""
    echo "<TARGET_DIRECTORY>    the destination directory"
    echo ""
}

function notDarwin {
    mv -f $CUR_DIR/* $NEW_DIR/
    ln -sf "$NEW_DIR/ee/sc/scrp" "/usr/bin/scrp"
    ln -sf "$NEW_DIR/ee/etc/conffile.conf" "/etc/conffile.conf"
    exit 0
}

function isDarwin {
    mv -f $CUR_DIR/* $NEW_DIR/
    ln -sf "$NEW_DIR/ee/sc/scrp" "/usr/local/bin/scrp"
    cp "$NEW_DIR/ee/etc/conffile.conf" "/etc/conffile.conf"
    exit 0
}

#
#   =============================================
#   ================== MAIN =====================
#   =============================================
#

CUR_DIR=${1%/}
NEW_DIR=${2%/}

if [ ! -d "$CUR_DIR" ]; then
    echo ""
    echo "blah blah"
    usage
    exit 1
fi

if [ ! -d "$NEW_DIR" ]; then
    echo ""
    echo "The target directory supplied does not exist. Creating target directory $NEW_DIR"
    mkdir "$NEW_DIR"
    if [ $? -ne 0 ]; then
        echo "Could not create target directory. Exiting..."
        exit 1
    else
        echo "Directory $NEW_DIR created"
    fi
    echo ""
fi

UNAME=$(uname)
if [ $UNAME == "Darwin" ]; then
    isDarwin
else
    notDarwin
fi

sudo bash script.sh "arg1" "arg2"在具有bash 3.2的macOS上运行时,它将引发以下语法错误

'script.sh: line 7: syntax error near unexpected token `{
'script.sh: line 7: `function usage {

我对OS X相当陌生,也许我缺少一个陷阱。该脚本在Linux上运行良好...

谢谢

汤姆·费内奇

Linux和现代OS X期望行以LF(换行)字符结尾。如果您的行以CR + LF结尾,那么您将遇到问题。


其他一些一般性指针:

function语法是非标准的。您应该使用所有POSIX兼容外壳程序都支持的标准语法:

改变:

function usage {

到:

usage() {

我怀疑一切都会好起来的。

顺便说一句,您应该引用所有参数扩展名(您错过了几个)。使用小写的变量名也被认为是一种好习惯,因为大写的变量名被shell使用,并且冒着与它们冲突的风险。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash语法错误(“ <”中的令牌错误)

来自分类Dev

bash中if [“ $ foo” ==“ bar”]的语法错误

来自分类Dev

Bash语法错误

来自分类Dev

Bash语法错误

来自分类Dev

bash中的“意外令牌'elif'附近的语法错误”错误

来自分类Dev

语法错误:bash中的文件意外结束错误

来自分类Dev

BASH语法错误-[:缺少`]'

来自分类Dev

Bash:@()上的语法错误

来自分类Dev

bash命令的语法错误

来自分类Dev

Bash如果...则...语法错误

来自分类Dev

Bash:语法错误:“(”意外

来自分类Dev

BASH脚本中的语法错误-readarray + cut命令

来自分类Dev

条件表达式中的Bash语法错误

来自分类Dev

(standard_in)1:bash脚本中的语法错误

来自分类Dev

在bash中,函数内部的Heredoc返回语法错误

来自分类Dev

sh中的语法错误-为bash构建并工作

来自分类Dev

BASH脚本中的语法错误-readarray + cut命令

来自分类Dev

语法错误:“(”意外(期望的单词)---在我的bash脚本中

来自分类Dev

构建不带Bash的Mono:doltlibtool中的语法错误

来自分类Dev

如何在bash shell中引发语法错误

来自分类Dev

从 bash 转换为 python 的代码中的语法错误

来自分类Dev

.bash_profile 中的语法错误意外的文件结尾

来自分类Dev

ReactJS中的语法错误

来自分类Dev

coffeescript中的语法错误

来自分类Dev

Erlang中的语法错误

来自分类Dev

IE中的语法错误

来自分类Dev

coffeescript中的语法错误

来自分类Dev

Conda中的语法错误

来自分类Dev

声明中的语法错误