inotifywait :插入任意字符串到输出格式

inotifywait :插入任意字符串到输出格式

我想捕获目录中的 inotify CLOSE_WRITE 事件并将 CSV 信息写入历史文件。

我的尝试:

#!/bin/bash
dir=/home/stephen/temp
host=$(hostname)
inotifywait -e close_write -m --timefmt '%Y-%m-%d,%H:%M' --format '%T,$host,%e,%w,%f' $dir | while read event;
do
    echo $event
done

这会产生

2022-06-14,16:58, `hostname`, CLOSE_WRITE,CLOSE, /home/stephen/temp/, testfile.txt

我试过了$host$(hostname)效果是一样的。事件的格式定义不接受外部定义的变量。

我可以将其全部包装在 python 脚本中,但我宁愿找到 shell 本机解决方案。

答案1

您可以插入存储在变量中的任何字符串(甚至是多行)或使用命令替换,只要您记住引用时适用于扩展的规则即可。单引号内的任何内容都将按字面打印。断开单引号并使用双引号来表示要扩展的变量或命令替换。看
shell 中的 "..."、'...'、$'...' 和 $"..." 引号之间有什么区别?

例如在您的特定情况下使用类似的格式

--format '%T, $host: '"${host}"',%e,%w,%f'

或者

--format '%T, $host: '"$(hostnamectl hostname)"',%e,%w,%f'

印刷

2022-12-20,06:21, $host: tuxedo,CLOSE_WRITE,CLOSE,./,test

因此第一个$host按字面打印,而双引号之间的部分则扩展为主机名。

相关内容