端末に「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'
}

ベストアンサー1

おすすめ記事