O shell está interpretando o IFS = $ '\ n' como IFS = 'n'

0

Estou usando um shell Bash em um servidor LTS do Ubuntu 12.04, e parece que o IFS = $ '\ n' está sendo tratado como IFS = 'n'.

Script em uso:

concat=$(echo -n "concat:" && find /home/jhvisser/bin/Streamripper_rips -name '*.aac' -mtime -1 -exec echo -n "{}|" \;)
echo $concat
IFS=$'\n'
for i in =$(echo "$concat" | sed -e 's/^concat://' -e 's/|$//' -e 's/|/\n/g');
    do rm "$i"
done

Saída de $(echo "$concat" | sed -e 's/^concat://' -e 's/|$//' -e 's/|/\n/g') :

rm: cannot remove '=/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/Safe A': No such file or directory
rm: cannot remove 'd Sou': No such file or directory
rm: cannot remove 'd - Capital Cities (1).aac\n/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/U Got It Bad - Usher.aac\n/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/Life Of The Party - PRTY H3RO.aac\n/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/i': No such file or directory
rm: cannot remove 'complete/True Love - Pi': No such file or directory
rm: cannot remove 'k.aac\n/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/i': No such file or directory
rm: cannot remove 'complete/The Other Side - Jaso': No such file or directory
rm: cannot remove ' Derulo.aac\n/home/jhvisser/bi': No such file or directory
rm: cannot remove '/Streamripper_rips/Karma - Kristi': No such file or directory
rm: cannot remove 'a Maria.aac': No such file or directory

Está quebrando a cada 'n'. Confira abaixo os nomes corretos de todos os arquivos:

/home/jhvisser/bin/Streamripper_rips/Safe And Sound - Capital Cities (1).aac
/home/jhvisser/bin/Streamripper_rips/U Got It Bad - Usher.aac
/home/jhvisser/bin/Streamripper_rips/Life Of The Party - PRTY H3RO.aac
/home/jhvisser/bin/Streamripper_rips/incomplete/True Love - Pink.aac
/home/jhvisser/bin/Streamripper_rips/incomplete/The Other Side - Jason Derulo.aac
/home/jhvisser/bin/Streamripper_rips/Karma - Kristina Maria.aac

Eu estou querendo saber por que isso pode estar acontecendo? Não deveria estar quebrando a cada nova linha?

Para mais detalhes sobre o que está sendo feito, confira este bate-papo .

    
por ComputerLocus 10.10.2013 / 21:55

3 respostas

4

como sugerido:

O problema era que esse script bash estava sendo chamado com sh : em muitos sistemas Linux, sh é dash not bash. As citações ANSI-C são um recurso bash.

O ideal é adicionar #!/bin/bash como a primeira linha do script, conceder permissões de execução e invocá-lo diretamente.

    
por 10.10.2013 / 22:48
1

Por que não apenas find /home/jhvisser/bin/Streamripper_rips -name '*.aac' -mtime -1 -delete ?

    
por 10.10.2013 / 22:20
1

Eu não tenho permissão para postar comentários, então eu tive que postar isso como uma resposta:

Tente escapar do \, substitua s/|/\n/g por s/|/\n/g .

    
por 10.10.2013 / 22:21