代码之家  ›  专栏  ›  技术社区  ›  Some Name

在bash中动态生成命令

  •  0
  • Some Name  · 技术社区  · 5 年前

    我想根据命令行选项动态生成相当长的bash命令。以下是我所尝试的:

    CONFIG_PATH=""
    
    #Reading CONFIG_PATH from getopts if supplied
    
    SOME_OPT=""
    if [ ! -z "$CONFIG_PATH" ]; then
        SOME_OPT="-v -s -cp $CONFIG_PATH"
    fi
    
    some_bash_command $SOME_OPT
    

    这里的重点是,我想将0个参数传递给 some_bash_command 如果没有参数传递给脚本。如果有一些争论,我想通过它们。

    它工作得很好,但问题是这种方法在我看来相当不自然。

    有什么更好但实用的方法来做到这一点?

    1 回复  |  直到 5 年前
        1
  •  3
  •   ruakh Sivagopal Manpragada    5 年前

    你的方法或多或少是标准的;我建议的唯一重大改进是使用 array ,这样你就可以正确地引用这些论点。(否则,如果任何参数碰巧包含空格或星号等特殊字符,您的命令可能会表现得非常糟糕。)

    所以:

    SOME_OPT=()
    if [ ! -z "$CONFIG_PATH" ]; then
        SOME_OPT=(-v -s -cp "$CONFIG_PATH")
    fi
    
    some_bash_command "${SOME_OPT[@]}"