Recentemente, postei uma pergunta sobre um comportamento estranho que observei no bash
, fish
e zsh
shells que não foram exibidos pelo tcsh
, csh
, ksh
ou dash
shells. Acontece que o comportamento foi causado por uma alteração nas configurações padrão da readline
biblioteca e corrigi-o adicionando set enable-bracketed-paste Off
ao meu arquivo ~/.inputc
.
Isso me fez pensar. Por que isso afetou apenas esse subconjunto específico de shells no meu sistema? Todas as conchas não usam readline
? Existe algum tipo de regra geral? Por que bash
, zsh
e fish
mudou seu comportamento enquanto as outras conchas não?
readline
é implementado ao ladobash
do mesmo autor e usado porbash
e entre shells populares, principalmente apenasbash
.A
readline
biblioteca foi gerada a partir do bash.bash
O arquivo de 1.02ChangeLog
tem:zsh
usou uma versão modificada dobash
readline de 's na primeira versão 1.0 em 1990, pois seu próprio editor de linha ainda não estava pronto, mas mudou para o 2.0 quatro meses depois, em 1991. DoREADME
arquivo em 1.0:Shells baseados em Ash normalmente usam o libedit do BSD (no caso de
dash
muitas vezes não estar habilitado em tempo de compilação, poisdash
é destinado apenas à execução de scripts, não como um shell interativo).O clone do
rc
shell Unix V10 / Plan9 de Byron Rakitzis oferece uma escolha de editores de linha em tempo de compilação: GNUreadline
, Simmule Turnereditline
e Gert-Jan Vonsvrl
. A primeira versão oferecia apenas readline.es
eakanga
, com base narc
oferta de uma escolha dereadline
vseditline
.O busybox tem seu próprio editor de linha que é usado por seus shells
hush
eash
por outros applets como seubc
,ed
,fdisk
.readline
é ótimo porque fornece um editor de linha que pode ser (e é ) usado em muitas ferramentas diferentes, fornecendo consistência, mas, embora seja provavelmente uma das bibliotecas de edição de linha de propósito geral mais ricas em recursos, é relativamente limitado no que você pode fazer com ele. Também é licenciado sob a GPL, portanto, só pode ser usado em software licenciado sob a GPL ou compatível .A maioria dos shells, incluindo ksh, pdksh e derivados, tcsh, zsh, fish ou yash, tem seu próprio editor de linha, geralmente mais avançado. Os editores de linha do ksh foram escritos por volta de 1983 muito antes
bash
do , e essa é a interface que o readline do bash mais copiou.pdksh
etcsh
editores de linha também são anteriores ao bash e ao readline. Umvi
editor de linha de estilo é especificado pelo POSIX, baseado em ksh's. Oemacs
que não é especificado pelo POSIX, pois Richard Stallman (o principal autor do GNUemacs
e, incidentalmente, também criou o nome "POSIX") se opôs a ele¹.Observe que há boas razões pelas quais você deseja habilitar o modo de colagem entre colchetes em editores de terminal ou editores de linha que o suportam. Veja: Como posso me proteger desse tipo de abuso na área de transferência? .
¹ VerO modo de edição de linha de comando do shell emacs foi finalmente omitido porque ficou aparente que a versão do KornShell e o editor distribuído com o sistema GNU divergiram em alguns aspectos. O autor do emacs solicitou que o modo POSIX emacs fosse excluído ou tivesse um número significativo de condições não especificadas. Embora o autor do KornShell tenha concordado em considerar mudanças para alinhar o shell, os desenvolvedores do padrão decidiram adiar a especificação naquele momento. Na época, supunha-se que a convergência em uma definição aceitável ocorreria para um projeto subsequente, mas isso não aconteceu, e parece não haver ímpeto para fazê-lo. De qualquer forma, as implementações são gratuitas para oferecer modos de edição de linha de comando adicionais com base nos modelos exatos de editores com os quais seus usuários se sentem mais confortáveis."na seção RATIONALE da
sh
especificação POSIX .