如何在原始日志文件旁边创建一个辅助可读文本文件,就像您在终端中手动输入“savelog”时出现的那样?

如何在原始日志文件旁边创建一个辅助可读文本文件,就像您在终端中手动输入“savelog”时出现的那样?

这个问题来自这里的这个问题:将所有终端输出保存到文件中,特别是这篇文章:https://unix.stackexchange.com/a/323920/478293但我无法在那里发表评论询问这个问题,因为我需要 50 声望,并且直接向编辑或海报发消息似乎在该网站上不存在......

好的,所以我尝试将 savelog 块中的一些行添加到智能脚本块中,以使这项工作适合我自己,但我不知道我是否做对了......它说 rawlog 文件不存在,这我想这有点正确,因为它正在尝试转换尚不存在的原始日志文件,我该如何制作它才能等到它存在?

我猜我需要一个 if else 语句,但不知道用什么来告诉它等待文件被创建并且然后转换并自动在同一目录中自动生成其可读文本文件副本以及原始 rawlog 文件,而无需在终端中调用 savelog 命令。有任何想法吗?

我的代码:

# Execute "script" command just once
smart_script(){
    # if there's no SCRIPT_LOG_FILE exported yet
    if [ -z "$SCRIPT_LOG_FILE" ]; then
        # make folder paths
        logdirparent=~/Terminal_typescripts
        logdirraw=raw/$(date +%F)
        logdir=$logdirparent/$logdirraw
        logfile=$logdir/$(date +%F_%T).$$.rawlog
        txtfile=$logdir/$(date +%F_%T).$$'.txt'

        # if no folder exist - make one
        if [ ! -d $logdir ]; then
            mkdir -p $logdir
        fi

        export SCRIPT_LOG_FILE=$logfile
        export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

        # make .rawlog readable and save it to .txt file
        cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile

        # quiet output if no args are passed
        if [ ! -z "$1" ]; then
            script -f $logfile
            script -f $txtfile
        else
            script -f -q $logfile
            script -f -q $txtfile
        fi

        exit
    fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
    # make folder path
    manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
    # if no folder exists - make one
    if [ ! -d $manualdir ]; then
        mkdir -p $manualdir
    fi
    # make log name
    logname=${SCRIPT_LOG_FILE##*/}
    logname=${logname%.*}
    # add user logname if passed as argument
    if [ ! -z $1 ]; then
        logname=$logname'_'$1
    fi
    # make filepaths
    txtfile=$manualdir/$logname'.txt'
    rawfile=$manualdir/$logname'.rawlog'
    # make .rawlog readable and save it to .txt file
    cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
    # copy corresponding .rawfile
    cp $SCRIPT_LOG_FILE $rawfile
    printf 'Saved logs:\n    '$txtfile'\n    '$rawfile'\n'
}

相关内容