ksh - mapeia Ctrl-D para sair do shell

0

Eu gostaria de saber como podemos mapear as chaves Ctrl - D no ksh para sair do shell como no shell bash.

Não muito familiarizado com a ligação de chaves no ksh.

Editar

Veja meus comentários abaixo.

$ echo $0
bash
$ exit    # I pressed Ctrl-D here, 'exit' string was placed and the shell exited

$> echo $0
ksh
$> Use 'exit' to leave ksh  # I pressed Ctrl-D here, Got this message and returned to the ksh prompt
$> echo $0
ksh
$> cat >> somefile
Some text
$>   # I pressed Ctrl-D here. So this key combination is taken as eof char for file, but not for exit.

Então, é necessário Ctrl - D ser mapeado para sair do shell? Como eu faço isso?

    
por mtk 08.02.2013 / 11:50

2 respostas

1

Você deseja o comando stty : veja como ^ D é mapeado com stty -a . Você pode mudar isso para outra coisa com stty eof char : remova a configuração "eof" com stty eof undef

Não testado: você deseja ler sobre o comando trap na página do manual do ksh. Pode ser suficiente configurar um manipulador para o sinal EXIT .

# warning: completely untested
exit_handler() { echo "exit"; exit; }
trap exit_handler EXIT
    
por 08.02.2013 / 12:54
1

Ctrl + D (ASCII EOT ) já está mapeado para sair do shell, em vi e emacs modos, como explica a página de manual ksh93 . É evidentemente assim, a partir da captura do script.

A página de manual também explica o que os outros comentaram aqui, que essa chave só tem esse efeito se a linha estiver vazia. (Isso imita o comportamento padrão da disciplina de linha no modo cozido).

O que você está perdendo, o que também é explicado pela página de manual, é que você tem a opção ignoreeof ativada. Então o Korn Shell viu a Ctrl + D em uma linha vazia, e a ignorou, imprimindo a mensagem que você vê, para explicar que com ignoreeof set on você deve usar explicitamente o comando exit .

Portanto, esqueça stty e manipuladores de trap, como na outra resposta; e simplesmente:

set -o noignoreeof
    
por 30.01.2015 / 19:19