터미널에 "savelog"를 수동으로 입력할 때 나타나는 것과 같이 원본 로그 파일 옆에 사람이 읽을 수 있는 보조 텍스트 파일을 만들려면 어떻게 해야 합니까?

터미널에 "savelog"를 수동으로 입력할 때 나타나는 것과 같이 원본 로그 파일 옆에 사람이 읽을 수 있는 보조 텍스트 파일을 만들려면 어떻게 해야 합니까?

이 질문은 다음 질문에서 비롯됩니다.모든 터미널 출력을 파일에 저장, 특히 이 기사:https://unix.stackexchange.com/a/323920/478293하지만 평판 50이 필요하고 편집자나 포스터에게 직접 메시지를 보내는 사이트에는 존재하지 않는 것 같아서 이 질문을 하는 댓글을 게시할 수 없습니다...

좋습니다. 이 작업을 직접 수행하기 위해 savelog 블록의 일부 줄을 스마트 스크립트 블록에 추가하려고 시도했지만 제대로 했는지는 모르겠습니다... rawlog 파일이 존재하지 않는다고 표시됩니다. 다소 그럴 것 같습니다. 맞습니다. 아직 존재하지 않는 원본 로그 파일을 변환하려고 하는데 파일이 존재할 때까지 기다리게 하려면 어떻게 해야 합니까?

if else 문이 필요한 것 같은데, 파일이 생성될 때까지 기다리도록 무엇을 말해야 할지 잘 모르겠습니다.그 다음에터미널에서 savelog 명령을 호출하지 않고도 원본 rawlog 파일과 함께 동일한 디렉터리에 읽을 수 있는 텍스트 파일 복사본을 변환하고 자동으로 생성합니다. 어떤 아이디어가 있나요?

내 코드:

# 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'
}

관련 정보