是否可以安全地忽略上述错误消息?或者是否可以删除空字节?我尝试删除它,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
答案1
至于你的确切问题:
我可以安全地忽略:“警告:...忽略空字节...”吗?
答案是肯定的,因为您正在使用自己的代码创建空字节。
但真正的问题是:为什么需要“空字节”?
该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 的默认值在空格上分割输入,然后仅使用目录和文件名进行复制。