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문자 그대로 인쇄되고 큰따옴표 사이의 부분은 호스트 이름으로 확장됩니다.

관련 정보