Posso ignorar com segurança: “aviso: substituição de comando: ignorado byte nulo na entrada”?

4

É possível ignorar com segurança a mensagem de erro mencionada anteriormente? Ou é possível remover o byte nulo? Tentei removê-lo com tr , mas ainda recebo a mesma mensagem de erro.

este é o meu script:

#!/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

quando executo inotify-create.sh e crio um novo arquivo em "monitordir"

Eu recebo:

[@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
    
por jes516 28.12.2016 / 19:52

1 resposta

4

Quanto à sua pergunta exata:

Can I safely ignore: “warning: … ignored null byte … ”?

A resposta é sim, já que você está criando o byte nulo com seu próprio código.
Mas a verdadeira questão é: por que você precisa de um "byte nulo"?

O comando inotifywait produzirá uma saída na forma de:

$dir ACTION $filename

Qual, para sua entrada, se parece com isso (para o arquivo hello4):

/home/user/Monitor/ CREATE hello4

O comando cut irá imprimir os campos 1 e 3, e usar um delimitador nulo em --output-delimiter="" produzirá uma saída com um nulo incorporado, algo como:

$'/home/user/Monitor/
#!/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
hello4\n'

Isso não é o que você precisa, devido ao valor nulo adicionado.

A solução acaba sendo muito simples.
Como você já está usando o comando read , faça isso:

$dir ACTION $filename

Use o valor padrão do IFS para dividir os espaços em branco da entrada e apenas use o diretório e o nome do arquivo para copiar.

    
por 28.12.2016 / 21:44