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

如何轻松地将shell脚本中的所有echo语句放入日志文件中

  •  0
  • TheWaterProgrammer  · 技术社区  · 6 年前

    我有一个shell脚本,它在逻辑中的一些重要位置有回声。每次回显时,我都通过执行 >> /some/location/my_logtxt .

    逻辑如下

    ret=123
    echo Something happened $ret >> /some/location/my_logtxt
    
    // some logic 
    echo Something else happened $ret >> /some/location/my_logtxt
    
    // some more logic 
    
    echo Something else happened again $ret >> /some/location/my_logtxt
    

    问题:
    难道没有一条语句可以声明所有echo语句日志都进入以下文件而不是这样做吗 >> echo

    2 回复  |  直到 6 年前
        1
  •  1
  •   Toby Speight    6 年前

    如果你愿意的话 全部的 exec 要重定向:

    exec >> "$logfile"
    

    2>&1 .


    如果你只想 echo

    exec 3>> "$logfile"
    
    ret=123
    echo "Something happened $ret" >&3
    
    # some logic 
    echo "Something else happened $ret" >&3
    

        2
  •  1
  •   Alfe    6 年前

    您可以在子shell中确定内容的范围,并重定向子shell的输出:

    (
        ret=123
        echo Something happened "$ret"
        // some logic 
        echo Something else happened "$ret"
        // some more logic 
        echo Something else happened again "$ret"
    ) >> /some/location/my_logtxt
    

    如果你只是想影响你的 echo myecho 改为声明:

    myecho() {
        echo "$@" >> /some/location/my_logtxt
    }
    
    ret=123
    myecho Something happened "$ret"
    // some logic 
    myecho Something else happened "$ret"
    // some more logic 
    myecho Something else happened again "$ret"
    

    (更合适的名称可能是 log 迈乔