这个问题来自这里的这个问题:将所有终端输出保存到文件中,特别是这篇文章: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'
}