Como posso fazer o comando “bind” para trabalhar com sh shell?

1

Como posso fazer o próximo script para ser executado quando estou usando sh shell:

#!/bin/bash

bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
bind '^[[1'=prefix-2
bind '^[[1~'=beginning-of-line
bind '^[[4'=prefix-2
bind '^[[4~'=end-of-line

    
por Radu Rădeanu 06.07.2013 / 11:03

2 respostas

3

bind é um comando bash, não um comando sh. Se você não estiver usando o bash, o comando bind não estará disponível.

Dependendo da plataforma, sh pode ser um dos vários shells. Todos eles fornecem um núcleo comum para criação de scripts. O sh simples dificilmente possui recursos convenientes para uso interativo; em particular, o% normal sh não tem noção de associações de teclas.

Em alguns sistemas, sh é bash (que é executado em um modo de compatibilidade quando chamado como sh ) e usa a biblioteca readline para edição de linha de comando e suporta as associações de teclas através do bind builtin. Outros sistemas usam shells mais enxutos, como dash ou ksh, que são mais rápidos para executar scripts. Se você quiser uma interface de linha de comando decente, não chame sh .

Observe que o script que você escreveu não tem efeito quando executado (exceto para imprimir avisos de que o comando bind é inútil em um shell não interativo). Um arquivo contendo apenas definições de ligação de chave não pode ser um executável autônomo útil, apenas um fragmento de shell. Então o shebang no topo não é útil.

    
por 25.09.2013 / 09:45
1

bind não está disponível em sh . Modifique ~/.inputrc se você quiser alterar as ligações de linha de leitura.

    
por 06.07.2013 / 11:15