Como você encontra quais teclas os caracteres “delete” e “line-kill” estão no Ubuntu?

5

Sou novo no Unix e comprei hoje uma cópia do "The Unix Programming Environment". Estou experimentando as coisas do livro. Mas alguns deles não estão funcionando como esperado: Para eliminar uma linha e redigitá-la novamente, o caractere @ deve ser usado:

livro

$ ddtae@
date
Thu Nov 28 18:12:47 IST 2013

meu terminal

$ ddtae@
ddtae@: command not found

Outro exemplo é usar # para apagar o último caractere

livro

$ dd#att#e#e

que sai como data e imprime.

meu terminal

$ dd#att#e#e
dd#att#e#e: command not found

no meu sistema # é usado para fins

Embora tenham mencionado que esses caracteres são dependentes do sistema. Como posso encontrar os caracteres do meu sistema para executar acima de duas tarefas?

    
por user10607 28.11.2013 / 13:57

3 respostas

4

O controle de linha de terminal pode ser consultado e / ou configurado por stty . Para ver as configurações atuais, use stty -a . As páginas de manual fornecem detalhes.

Por exemplo, de stty -a você pode encontrar este controle de linha de morte:

kill = ^U

O cursor significa manter pressionada a tecla Ctrl ( Ctrl ) e, em seguida, digitar o caractere mostrado ( U ). Para alterar a sequência de eliminação de linha, você poderia fazer:

$ stty kill \@

NOTA: A barra invertida é uma fuga para significar que o caractere seguinte deve ser interpretado literalmente pelo shell.

Tendo mudado seu line-kill para isso, (um literal @ ), você pode agora destruir uma linha que se parece com:

$ ddtae@

NOTA: No cenário acima, quando você digita ddtae , quando você digita o caracter @ , a linha inteira será apagada .

Uma maneira de restaurar as configurações padrão (e isso é muito útil quando você altera inadvertidamente as configurações) é simplesmente:

$ stty sane

No entanto, outro uso de stty é controlar o eco do caractere. Por exemplo, uma maneira simples de ocultar a senha de um usuário que ele digita é:

#!/bin/sh
echo "Enter password"
stty -echo
read PWORD
stty  echo
echo "You entered '${PWORD}'"
    
por 28.11.2013 / 15:00
1

Um livro que menciona @ e # como caracteres de edição de linha está seriamente datado. Está com 40 anos desatualizado. Estes são recursos desde os primórdios do Unix e, embora ainda existam, @ e # não são a configuração padrão em nenhum sistema moderno - em vez disso, o caractere de apagar caracteres é retrocesso (definido como ^h ou ^? dependendo do sistema - se tudo correr bem, é o que a tecla BackSpace envia) e o caractere de apagamento de linha é ^u ( Ctrl + U ). É muito raro alterar essas configurações hoje em dia, exceto às vezes com a tecla BackSpace porque ela pode enviar dois caracteres diferentes dependendo do SO, tipo de terminal e configuração.

Esses caracteres podem ser configurados com o comando stty , por exemplo stty erase \# kill @ para definir as configurações antigas do Unix. Você pode ver as configurações atuais com stty -a . Você pode configurar muitas outras configurações relacionadas ao terminal. Se você errar, execute stty sane para voltar a uma configuração utilizável; você pode fazer isso de outro terminal, por exemplo stty sane </dev/pts/42 para restaurar a configuração do terminal pts/42 (execute tty para ver o nome do terminal atual).

As configurações stty só se aplicam quando o terminal está no “modo cozido”, que é o editor de linha de comando extremamente grosseiro embutido no driver do terminal. Os shells modernos têm seu próprio editor e configuram o terminal para o modo raw, portanto as configurações stty não se aplicam. Bash, csh e ksh emulam os caracteres de edição do modo cozido, enquanto tcsh, zsh e fish se atêm às suas próprias associações de teclas.

    
por 29.11.2013 / 02:01
0

Os comandos que você está procurando são dependentes do shell e podem ser personalizados pelo sysadmin e pelos usuários também.

O Bash é um dos shells padrão mais comuns no Linux. Parece que você está procurando o que o manual bash chama de Nomes dos Comandos da Readline e suas associações de teclas.

 $ ddtae@
 date

O @ pode ser usado como o unix-line-discard no bash: CTRL + u ou alternativamente o backward-kill-word ALT + Backspace

$ dd#att#e#e

No exemplo acima, o # pode ser simplesmente o Rubout, que é normalmente mapeado para Backspace .

    
por 28.11.2013 / 15:18