Acabei de notar que em uma das minhas máquinas (executando o Debian Sid) sempre que digito ls
qualquer nome de arquivo com espaços, há aspas simples.
Eu verifiquei imediatamente meus apelidos, apenas para encontrá-los intactos.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
Outro teste, com arquivos contendo aspas simples em seus nomes (também respondendo a uma solicitação de jimmij):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
atualize com a nova saída coreutils-8.26 (que é reconhecidamente muito menos confusa, mas ainda assim irritante por padrão). Agradecimentos a Pádraig Brady por esta impressão:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Por que isso está acontecendo? Como faço para parar corretamente?
para esclarecer, eu próprio defino ls para colorir automaticamente a saída. Nunca colocou aspas em torno das coisas antes.
Estou executando bash
e coreutils 8.25.
EDIT: Parece que os desenvolvedores do coreutils pensaram (link) que seria uma boa idéia tornar esse padrão global, apesar de quebrar o princípio de menor espanto e mais de 46 anos de tradição UNIX.
Alguma maneira de corrigir isso sem recompilar?
ATUALIZAÇÃO - outubro de 2017 - O Debian Sid reativou a citação de escape do shell por padrão. Isso está ficando ridículo. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
E na parte inferior da cadeia de respostas do relatório de erros anterior, "a mudança foi intencional e permanecerá". https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
Eu pensei que isso estava resolvido. Aparentemente não.
ATUALIZAÇÃO: abril de 2019: Acabei de encontrar um relatório de erro supurativo no PHP que foi causado por essa alteração no ls
. Quando você está confundindo os desenvolvedores e gerando relatórios de erros falsos, é hora de repensar suas alterações.
Atualização: a caixa de brinquedos Android ls
agora está fazendo algo semelhante a isso, mas com barras invertidas em vez de aspas. O uso da opção -q torna os espaços renderizados como 'caracteres de ponto de interrogação' (não verifiquei o que são, pois obviamente não são espaços); portanto, a única correção que encontrei até agora sem fazer o root do dispositivo em questão é adicionar isso para um script e origine-o ao iniciar um shell. Essa função ls
utiliza colunas se estiver em um terminal e, caso contrário, imprime uma por linha, enquanto engana os ls
espaços de impressão literalmente porque está passando por um tubo.
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | cat
e veja se desaparece. Se eu tivesse uma máquina do tempo, voltaria ao Bell Labs ~ 1970 e tentaria convencer Ken Thompson que permitir espaço nos nomes de arquivos e diretórios é uma má idéia. :-P
'*'
. Eu acho que vou por aí adicionando ls
aliases em todas as minhas máquinas para me livrar dele ...
QUOTING_STYLE=literal
e não com um alias. (Eu acho que é uma questão de gosto, mas eu prefiro a variável.)
ls
comando.