Eu notei esta pergunta no ServerFault:
Eu sabia sobre o ^V
papel há muito tempo. O que me interessa nessa postagem é que o OP pode ver o ^C
caractere como ^C
(sinal circunflexo seguido por um C
) na conclusão da tabulação, mas não em ls
. Então, procuro um pouco a página de manual e posso descobrir ls -b
quais saídas \003
, ls -N
quais não fazem nada de especial para ^C
e ls --show-control-chars
quais mostram um caractere Unicode na tela.
Minha primeira pergunta é: existe uma maneira simples ls
de gerar o mesmo tipo de saída que a conclusão da guia, ou seja, ^C
(sinal circunflexo seguido por um C
)? ( cat -v
comportamento).
Minha segunda pergunta é: como $LANG
e as $LC_*
variáveis ambientais afetam a saída gerada pelo preenchimento da guia (acho que está documentado complete
e talvez na Seção 8 do Manual do Bash, mas não parece encontrar nada relevante)?
Estou usando bash
o 4.3, mas soluções para outros shells também são bem-vindas.
Esse comportamento não é o mesmo em todos os shells.
O shell Bourne Again se comporta como você descreve, exibindo o nome do arquivo em uma notação que não corresponde a como esses caracteres são inseridos no shell. O shell TENEX C faz o mesmo. Em nenhum deles, a sequência de dois caracteres
^C
corresponde ao nome de arquivo de um caractere.O shell Almquist e Korn apenas escreve o caractere de controle, que não faz nada em muitos terminais, e inclui uma largura de 1, que é, portanto, errônea, em seus cálculos de largura de coluna ao exibir a lista de conclusão. Isso desativa o alinhamento da coluna.
O shell Z é o único shell que faz algo relacionado ao uso de entrada de comando. Sua conclusão de guia baseada em menu exibe o nome do arquivo como
$'\003'
. Isso é exatamente o que se escreve com (digamos) orm
comando e é exatamente o que a conclusão da tabulação do ZLE preencherá para orm
comando , para remover o arquivo com o shell Z:Pode-se igualar as conchas Korn e Almquist.
Isso é banal.
A
-w
opção simplesmente faz com que o caractere de controle seja enviado como está, o que novamente não faz nada em muitos terminais. Mas pelo menosls
tem o nous para perceber que tem uma largura de 0 e não erra os cálculos de alinhamento da coluna.Sim, este é FreeBSD/TrueOS
ls
.E não há configuração para
ls
corresponder ao comportamento dos outros.Ambos
-B
e-b
fazem com que uma sequência de escape octal sem adornos seja impressa, não havendo nenhuma sequência de escape C especial para este caractere. Mas nenhum shell apresenta uma sequência de escape octal sem adornos na lista de conclusão. O shell Z chega mais perto, mas usa$'…'
aspas em torno da sequência de escape octal em suas conclusões.Não há nada que corresponda a como os shells Bourne Again e TENEX C exibem o nome do arquivo.
localidades
Os locais são amplamente irrelevantes aqui. Este caractere é um caractere de controle não imprimível praticamente independentemente da localidade. A faixa C0 (ventiladores de ritmo EBCDIC) é considerada universalmente como caracteres de controle.