代码之家  ›  专栏  ›  技术社区  ›  Joel

在bash中动态构建命令

  •  14
  • Joel  · 技术社区  · 15 年前

    我正在动态构造bash中的命令。这很好用:

    COMMAND="java myclass"
    ${COMMAND}
    

    现在,我想动态地构造一个命令来重定向输出:

    LOG=">> myfile.log 2>&1"
    COMMAND="java myclass $LOG"
    ${COMMAND}
    

    命令仍然调用Java进程,但输出不会重定向到MyFiel.LoG。

    此外,如果我这样做:

    BACKGROUND="&"
    COMMAND="java myclass $BACKGROUND"
    ${COMMAND}
    

    命令没有在后台运行。

    有关于如何使日志重定向和后台位工作的线索吗?(bash-x显示按预期构造的命令)

    (实际上,与本例不同,日志和背景的值是动态设置的)

    3 回复  |  直到 15 年前
        1
  •  5
  •   Aaron Digulla    15 年前

    它不起作用,因为引号禁用了 > & . 必须执行实现shell这些功能的命令。

    要重定向,请致电 exec >> myfile.log 2>&1 在要记录的命令之前。

    要在后台运行程序,请使用 nohup ( nohup cmd args... )

        2
  •  15
  •   tangens    15 年前

    你可以用 eval 命令:

    eval ${COMMAND}
    
        3
  •  12
  •   ezpz    15 年前

    eval 做你想做的。

    #!/bin/bash
    
    CMD="echo foo"
    OUT="> foo.log"
    eval ${CMD} ${OUT}
    
    
    CMD="sleep 5"
    BG="&"
    eval ${CMD} ${BG}