错误:-测试:ing:一元运算符应为

时间:2018-06-29 12:04:50

标签: bash shell unix

下面是我的脚本,用于运行一些子命令。当我使用./test.sh sub_cmd $APP运行脚本时,它运行良好。但是,当我像test sub_cmd $APP一样运行它时,会抛出错误。

我想不使用./来运行脚本

error :- test: ing: unary operator expected

#!/bin/bash

ProgName=$(basename $0)

APP=${2?Need chart name}

sub_help(){
    echo "Usage: $ProgName <subcommand> [options]\n"

}

sub_dep(){
    echo "Running 'dep' command."
    vi some_path/${APP}/templates/deployment.yaml
}

sub_ing(){
    echo "Running 'ing' command."
    vi some_path/${APP}/templates/ingress.yaml
}

sub_svc(){
    echo "Running 'ing' command."
    vi some_path/${APP}/templates/service.yaml
}
subcommand=$1
case $subcommand in
    "" | "-h" | "--help")
        sub_help
        ;;
    *)
        shift
        sub_${subcommand} $@
        if [ $? = 127 ]; then
            echo "Error: '$subcommand' is not a known subcommand." >&2
            echo "       Run '$ProgName --help' for a list of known subcommands." >&2
            exit 1
        fi
        ;;
esac

1 个答案:

答案 0 :(得分:2)

您需要运行“ test.sh”而不是“ test”。

test sub_cmd $APP

您实际正在运行的是test命令,该命令位于路径的lib目录之一中。

如果您输入

which test

您可以看到要运行的命令/脚本/程序。

当您在命令前添加相对路径(例如./)或绝对路径(即以/开头)时,bash会在该特定文件夹中查找该命令。如果省略该路径,则它将搜索环境变量$ PATH中列出的目录并执行它遇到的第一个目录。 which命令执行相同的操作,只是列出了脚本/程序而不是执行它。