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
comando.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í adicionandols
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.)Respostas:
Prefácio : Embora possa ser bastante satisfatório aprovar uma resposta como essa e chamá-la um dia, tenha certeza de que os desenvolvedores do GNU não se importam com os votos de resposta SO, e que, se você realmente deseja incentivá-los a mudar , precisa envie-os por e-mail como esta resposta descreve.
" Por que isso está acontecendo? "
Vários desenvolvedores de coreutils decidiram que conheciam melhor que décadas de padrões de fato.
" Como eu paro isso corretamente? "
http://www.gnu.org/software/coreutils/coreutils.html :
Distros que já reverteram essa alteração:Debian coreutils-8.25-2Incluindo, conseqüentemente, presumivelmente, o Ubuntu e todas as centenas de derivados baseados no Debian e no UbuntuDistros não afetados:
" Alguma maneira de corrigir isso sem recompilar? "
Os proponentes queriam você ...
... em todas as suas instalações, em qualquer lugar, pelo resto da eternidade.
fonte
ls
que você vê não é mais como eles são armazenados. Esse recurso deve ser opcional, não o padrão.Você pode escolher o estilo de citação :
O mesmo que:
ou:
Crie um alias ou configure
export QUOTING_STYLE=literal
-o.bashrc
para obter um comportamento anterior a 8,25.fonte
export QUOTING_STYLE=literal
no seu bashrc.-N
, ao que parece. Estou apenas compilando minha própria versão, já que já tenho um repositório pessoal configurado.literal
vez deescape
(acredito que o @cuonglm só queria mostrar como mudar o estilo, não visando especificamente oescape
estilo).Alguns pontos sobre a mudança.
fonte
ls
quebrado? Veja todos esses argumentos contra sua alteração. Ninguém quer isso. Talvez seja hora de pedir desculpas ao mundo e desfazê-lo.