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スクリプトですべてをラップすることもできますが、シェルネイティブソリューションを見つけることをお勧めします。

ベストアンサー1

引用時に拡張に適用される規則を覚えている限り、変数に格納されている文字列(複数行を含む)を挿入するか、コマンド置換を使用できます。一重引用符内の内容は文字通り印刷されます。一重引用符を分離し、二重引用符を使用して拡張する変数またはコマンドの置換を示します。バラより
シェルの「...」、「...」、$'...'、および$"..."引用符の違いは何ですか?

たとえば、特定のケースでは同様の形式を使用します。

--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文字通り印刷され、二重引用符の間の部分はホスト名に展開されます。

おすすめ記事