この質問は、次の質問に由来します。すべての端末出力をファイルに保存、特にこの記事: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'
}