Bash
我可以安全地忽略:“警告:命令替換:輸入中忽略的空字節”嗎?
是否可以安全地忽略上述錯誤消息?或者是否可以刪除空字節?我嘗試將其刪除,
tr
但仍然收到相同的錯誤消息。這是我的腳本:
#!/bin/bash monitordir="/home/user/Monitor/" tempdir="/home/user/tmp/" logfile="/home/user/notifyme" inotifywait -m -r -e create ${monitordir} | while read newfile; do echo "$(date +'%m-%d-%Y %r') ${newfile}" >> ${logfile}; basefile=$(echo ${newfile} | cut -d" " -f1,3 --output-delimiter="" | tr -d '\n'); cp -u ${basefile} ${tempdir}; done
當我執行
inotify-create.sh
並創建一個新文件時"monitordir"
我得到:
[@bash]$ ./inotify-create.sh Setting up watches. Beware: since -r was given, this may take a while! Watches established. ./inotify-create.sh: line 9: warning: command substitution: ignored null byte in input
至於你的確切問題:
我可以安全地忽略:“警告:……忽略空字節……”嗎?
答案是肯定的,因為您正在使用自己的程式碼創建空字節。
但真正的問題是:為什麼需要“空字節”?
該
inotifywait
命令將產生以下形式的輸出:$dir ACTION $filename
對於您的輸入,它看起來像這樣(對於文件 hello4):
/home/user/Monitor/ CREATE hello4
命令 cut 將列印欄位 1 和 3,並且使用空分隔符 in
--output-delimiter=""
將生成帶有嵌入空的輸出,例如:$'/home/user/Monitor/\0hello4\n'
這不是您需要的,因為添加了 null。
解決方案非常簡單。
由於您已經在使用該命令
read
,請執行以下操作:#!/bin/bash monitordir="/home/user/Monitor/" tempdir="/home/user/tmp/" logfile="/home/user/notifyme" inotifywait -m -r -e create ${monitordir} | while read dir action basefile; do cp -u "${dir}${basefile}" "${tempdir}"; done
使用 IFS 的預設值在空白處拆分輸入,並僅使用目錄和文件名進行複制。