Por que o trabalho de expansão de arquivos para nomes de arquivos com um caractere de nova linha?

2
$ rm Think\ Python:\ How\ to\ Think\ Like\ a\ Computer
\ Scientist\ 2014.pdf 
rm: cannot remove ‘Think Python: How to Think Like a Computer’: No such file or directory
$  Scientist 2014.pdf: command not found
$ rm Think*
$

No primeiro rm , eu uso autocompletar no bash para especificar um arquivo com um caractere de nova linha em seu nome de arquivo, e ele não funciona por causa do caractere de nova linha.

No segundo rm , eu uso a expansão de arquivo para evitar explicitamente especificar o novo caractere de linha. Por que a expansão de arquivos pode evitar o problema? A expansão do arquivo não se expande para o nome completo do arquivo que contém o novo caractere de linha também?

    
por Tim 09.03.2016 / 09:22

1 resposta

1

No caso de rm do arquivo terminado em \ n, rm file* , a expansão do arquivo regexp "come" a nova linha como parte do argumento rm, portanto, o shell não o vê e não o analisa como um comando.

Como visto em uma sequência:

$strace rm teste.txt* 
execve("/bin/rm", ["rm", "teste.txt\n"],

Quanto ao preenchimento automático, ele obedece a um conjunto de regras predefinidas e não espera realmente ter um '\ n' lá.

    
por 09.03.2016 / 09:48

Tags