0

这是从 Atlassian 下载的一个简单的 shell 脚本,并稍作调整以满足目前发现的所有建议:

#!/bin/sh

# RUN_AS: The user to run fisheye as. Its recommended that you create a separate user account for security reasons
RUN_AS=fisheye

# FISHEYE_HOME: The path to the FishEye installation. Its recommended to create a symbolic link to the latest version so
# the process will still work after upgrades.
FISHEYE_HOME="/opt/atlassian/fisheye"

fisheyectl() {
        ARGS="--Xdisable-tags --Xenable-git-content-hash-resolving-heuristic"
        CMD="$FISHEYE_HOME/bin/fisheyectl.sh $1"
        if [ $1 == "run" ]
        then
            CMD="nohup $CMD $ARGS >> $FISHEYE_HOME/var/log/nohup.out &";
        fi
        if [ "$USER" != "$RUN_AS" ]
        then
                su - "$RUN_AS" -c "$CMD";
        else
                sh -c "$CMD";
        fi
}

case "$1" in
        start)
                fisheyectl run
                ;;
        stop)
                fisheyectl stop
                ;;
        restart)
                fisheyectl stop
                sleep 10
                fisheyectl run
                ;;
        *)
                echo "Usage: $0 {start|stop|restart}"
esac

exit 0

我已经在本地通过 dos2unix 运行了这个。执行时:

fisheye: 23: fisheye: Syntax error: "}" unexpected (expecting "fi")

有什么建议么?

4

3 回答 3

2

我遇到了类似的问题,结果我不得不将 #/bin/sh 行更改为 #/bin/bash

于 2014-02-28T20:54:47.143 回答
0

改变

if [ $1 == "run" ]

if [ ${1:-X} = "run" ]
于 2013-10-23T17:03:25.660 回答
0

改变这个:

if [ $1 == "run" ]

对此:

if [ "$1" = "run" ]

在 bash 的内置[命令中,==是 的同义词,但并非( ) 命令=的所有实现都识别. 是字符串相等比较的原始运算符 - 并且您的脚本具有,它可能与 bash 兼容,也可能不兼容。[test===#!/bin/sh

我还在$1. 在这种情况下,它们并不是绝对必要的,因为您总是fisheyectl()使用单个单词参数进行调用,但通常将变量引用括在单引号中是一个好主意。(如果没有引号,如果你fisheyectl()不带参数调用,你会得到if [ = "run" ],这是一个语法错误。)

于 2013-10-23T19:28:28.450 回答