Existe uma alternativa de shell POSIX para ler -e? [duplicado]

5

O título já diz tudo: Como posso obter os efeitos de read -e (que ativa a edição de linha via readline e está disponível em bash ) a partir de um shell geral (POSIX)? Eu não quero perder a compatibilidade POSIX apenas por causa deste comando.

    
por Socob 23.10.2017 / 17:11

2 respostas

5

readline é um projeto GNU (desenvolvido junto com bash ). Existem outras alternativas como o libedit BSD, e todas as shells POSIX possuem seu próprio editor de linha, específico para o shell ou baseado em qualquer uma das bibliotecas que implementam pelo menos um modo de edição vi (o único especificado pelo POSIX, embora a maioria também suporta um modo emacs (não especificado pelo POSIX porque o RMS objetou a ele)).

POSIX, no entanto, só especifica esse modo de edição de linha para a linha de comando do shell, não para read .

ksh93 suporta-o com read embora (desde que stdin seja um terminal). Lá você pode fazer:

set -o emacs
IFS= read -r 'line?prompt: '

O zsh equivalente está com o vared (editor de variáveis) embutido:

line=; vared -p 'prompt: ' line

Esse é o maior recurso rico em seu histórico de tratamento e na personalização completa da associação e conclusão de chaves.

read -e é bash específico.

IFS= read -rep 'prompt: ' variable

Não há equivalente POSIX. POSIXly, você poderia iniciar vi (especificado por POSIX) para editar um arquivo temporário e ler o conteúdo desse arquivo em uma variável.

Como alternativa, você pode procurar a disponibilidade de um dos zsh / bash / ksh93 ou rlwrap ou outros wrappers em torno de libreadline ou socat (desde que tenha sido criado com readline support ) e use qualquer um deles se disponível para ler a linha ou reverta para read ou vi se não.

Ou use essa LE função de editor de linhas vista neste Q & A semelhante que implementa um editor de linha semelhante a emacs .

    
por 23.10.2017 / 17:36
2

O POSIX read suporta apenas -r (para poder ler barras invertidas). Não há como solicitar ao usuário entrada e fornecer edição semelhante à da linha de comando, a menos que você ative um editor para um arquivo que você analisa mais tarde.

    
por 23.10.2017 / 17:27