我正在尝试bash script
每天运行一个生成日志文件的程序。
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>logfile.output 2>&1
(
OSS_NAME=$1
present_date="`date +"%Y-%m-%d-%H-%M-%S"`"
echo -e "\033[0;36mpresent_date:\033[0m $present_date"
) | tee -a /home/eksinvi/output/pm/NSN/NFV/InterfaceStatistics/logs/$OSS_NAME-logfile-$present_date-output
bash test.sh "Interface"
我期望每次它都会创建一个新的日志文件,并有一个带有日期和输入变量名称的动态名称。
Interface-logfile-2024-06-06-20-47-36-output
取出子 shell
(
和)
(创建脚本的子进程)。还要删除date
命令周围的多余引号:在子进程 (子 shell) 中,变量
$present_day
被填充了日期/时间字符串,但tee
在父进程中,需要该值来创建带时间戳的文件名。子进程可以从父进程继承变量的值,但父进程不能从子进程继承变量的值。我上面的版本在同一个进程中同时执行这两项操作。如果
echo
此处的命令只是测试版本,并且您的目标是在子 shell 中将多个命令通过管道传送到 tee,则在$present_date
填充变量后启动子 shell。子 shell 的命令将具有可用的值,父进程的tee
命令也将具有可用的值。我还在脚本开始时删除了文件描述符交换,因为
tee
写入其标准输出以及其-a
参数中的文件,并且文件描述符交换将其重定向到logfile.output
当前目录中的文件,这可能不是您想要的。