【问题标题】:Bash reads text file line by line and triggers logger to log the line into var/logBash 逐行读取文本文件并触发 logger 将该行记录到 var/log
【发布时间】:2020-02-20 21:14:09
【问题描述】:

我想写一个 bash/bash 脚本,它可以包含 while 循环,它会从头到尾逐行读取文本文件,并触发记录器从当前行创建一个日志文件。

有没有人知道如何实现这一目标?

代码:

#!/bin/bash

# A shell script to read file line by line
filename="/home/user/logs.txt" 

while read line do
    # $line variable contains current line read from the file 
    # display $line text on the screen or do something with it.
    logger "$line"
done < $filename 

【问题讨论】:

  • 到目前为止你尝试过什么?你说的是哪个记录器?
  • #!/bin/bash # 逐行读取文件的 shell 脚本 filename="/home/user/logs.txt" while read line do # $line 变量包含从file # 在屏幕上显示 $line 文本或对其进行处理。 logger "$line" done
  • 我现在已经在你的问题中添加了代码,但是下次你不应该把它放在 cmets 中。不仅更难阅读,没有人会在那里寻找它;-)

标签: bash shell file ubuntu terminal


【解决方案1】:

logger 命令打印/dev/log 中的数据。 logger 有一个 -f 选项可以将整个文件放入 syslog。

将文件读入系统日志:

$ logger -f some_file.txt

如果您想创建 X 日志文件,每个日志文件都有一行源自某个“父日志文件”,您应该改用 echo$line 回显到某个文件中。

#! /bin/bash

filename=some_file.txt
[[ -f ${filename} ]] || exit 1
x=0
while read -r line; do
    echo $line > log$((x++)).log
done < $filename
exit 0

【讨论】:

  • prints data in /var/log/syslog - 这不是真的。 logger 从不接触 /var/log/syslog。 logger 尝试了许多日志输出,但很可能在大多数 linux 系统上它会将数据写入 /dev/log
  • 不,它没有。您的系统记录器守护程序在从记录器接收数据后将数据打印到 /var/log/syslog。
  • 你说得对; strings $(which logger) 确实显示 /dev/log
  • strings 不是测试它的工具。您可以创建一个包含各种字符串的库,并且可以不使用它们。 strace logger 将显示 connect(...."/dev/log")
  • 感谢您编辑脚本。那么在哪里可以找到日志呢?我在 /var/log/syslog 中看不到它们...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2016-11-20
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
相关资源
最近更新 更多