我想捕获目录中的 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
按字面打印,而双引号之间的部分则扩展为主机名。