Gal*_*let 1 bash shell logging timestamp
我目前正在使用以下来记录标准输出和标准错误。我想记录回显语句和时间戳。
exec 3>&1 1>>${LOG_FILE} 2>&1
Run Code Online (Sandbox Code Playgroud)
我如何使用 shell 实现它
根据您可能需要该ts
实用程序的确切预期行为。
% echo message | ts
Apr 16 10:56:39 message
Run Code Online (Sandbox Code Playgroud)
你也可以别名echo.
% sh
$ alias echo='echo $(date)'
$ echo message
Mon Apr 16 10:57:55 UTC 2018 message
Run Code Online (Sandbox Code Playgroud)
或者让它成为一个shell函数。
#!/bin/sh
echo() {
command echo $(date) "$@"
}
echo message
Run Code Online (Sandbox Code Playgroud)
这里我使用一个函数来简化该行,但要寻找的主要内容是进程替换,这就是>(log_it)语法。 REPLY是 所使用的默认变量read。
logit() {
while read
do
echo "$(date) $REPLY" >> ${LOG_FILE}
done
}
LOG_FILE="./logfile"
exec 3>&1 1>> >(logit) 2>&1
echo "Hello world"
ls -l does_not_exist
Run Code Online (Sandbox Code Playgroud)
该示例放入logfile:
Mon 16 Apr 2018 09:18:33 BST Hello world
Mon 16 Apr 2018 09:18:33 BST ls: does_not_exist: No such file or directory
Run Code Online (Sandbox Code Playgroud)
您可能希望更改裸机$(date)以使用更好的格式。如果您运行的是 bash 4.2 或更高版本,您可以使用printf它,这会更有效,例如,而不是echo:
# -1 means "current time"
printf "%(%Y-%m-%d %T)T %s\n" -1 "$REPLY" >> ${LOG_FILE}
Run Code Online (Sandbox Code Playgroud)
给出:
2018-04-16 09:26:50 Hello world
2018-04-16 09:26:50 ls: does_not_exist: No such file or directory
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9350 次 |
| 最近记录: |