Se você fizer:
stty eol =
E, em seguida, execute a demonstração sugerida na sua edição , você verá a barra foo na impressão de test.out . A disciplina de linha do terminal liberará sua saída para o leitor à medida que ele lê cada caractere eol especial em sua entrada.
Um terminal de modo canônico do Linux - como pode ser configurado com stty icanon
ou provavelmente apenas stty sane
- lida com os seguintes caracteres de entrada especiais ...
- eof
- padrão:
^D
- Encerra uma linha de entrada e libera a saída para o leitor. Como é removido da entrada, se for inserido como o único caractere em uma linha, é passado como uma leitura nula - ou final do arquivo - para o leitor.
- eol
- padrão: não atribuído
- Também termina uma linha de entrada, mas não é removida da entrada.
- mate
- padrão:
^U
- Apaga toda a entrada em buffer.
- apagar
- padrão:
^H
(ou possivelmente @
ou ^?
em alguns sistemas)
- Apaga o último caractere de entrada em buffer.
Quando o iexten também é configurado - como stty icanon iexten
ou, novamente, provavelmente apenas stty sane
, um terminal canônico do Linux também manipula ...
- eol2
- padrão: não atribuído
- Além disso , também termina uma linha de entrada, e é também não removido a partir da entrada.
- werase
- padrão:
^W
- Apaga a última palavra de entrada em buffer .
- rprnt
- padrão:
^R
- Reimprime todas as entradas em buffer.
- proxima
- padrão:
^V
- Remove qualquer significado especial no que diz respeito à disciplina de linha para o caractere de entrada imediatamente seguinte.
Esses caracteres são manipulados removendo-os do fluxo de entrada - exceto eol e eol2 , ou seja - e executando a função especial associada antes de passar o fluxo processado para o leitor - que geralmente é seu shell, mas pode ser o grupo de processos em primeiro plano. .
Outros caracteres de entrada especiais que são tratados de maneira semelhante, mas podem ser configurados independentemente de qualquer configuração icanon , incluem o isig set - set like stty isig
e provavelmente também incluído em uma configuração sã :
- Sair
- padrão:
^\
- Libera toda a entrada em buffer (se noflsh não estiver definido) e envia SIGQUIT para o grupo de processos em primeiro plano - provavelmente gerando um core-dump.
- susp
- padrão:
^Z
- Libera toda a entrada em buffer (se noflsh não estiver definido) e envia o SIGTSTP ao grupo de processos em primeiro plano. O grupo de processos suspenso provavelmente pode ser retomado com um
kill -CONT "$!"
ou apenas fg
em um ( set -m
) shell controlado por tarefa.
- intr
- padrão:
^C
- Limpa toda a entrada em buffer (se noflsh não estiver definido) e envia o SIGINT ao grupo de processos em primeiro plano.
E o conjunto ixon - configurado como stty ixon
e também geralmente incluído em uma configuração sã :
- Pare
- padrão:
^S
- Interrompe toda a saída do leitor até que o início seja lido na entrada ou - quando ixany também está definido - pelo menos mais um caractere é lido.
- começar
- padrão:
^Q
- Reinicia a saída se ela tiver sido parada anteriormente com parada .
- Ambos parada e começar são removidos da entrada quando processado, mas se a saída for reiniciado devido a qualquer personagem na entrada quando ixany está definido então que o personagem não é removido.
Caracteres especiais manipulados em outros sistemas não Linux podem incluir ...
- rubor
- padrão:
^O
- Alterna o descarte e a descarga da entrada em buffer e é removida da entrada.
- dsusp
- padrão: não atribuído
- Liberta toda a entrada em buffer somente quando o leitor lê o caractere de entrada especial atribuído e envia o SIGTSTP.
E possivelmente...
- swtch
- padrão
^@
(significado \0
ou NUL
)
- Alterna camadas de shell em primeiro plano. Para uso com o aplicativo
shl
shell-layers em alguns sistemas.
- Uma implementação
shl
que multiplexa ptys e, portanto, é compatível com o controle de tarefas, em vez do comportamento dependente de swtch da implementação original, pode ser livremente realizada no heirloom-toolchest
conjunto de ferramentas.
Para uma imagem mais clara de como e por que (e talvez por que não) essas funções de entrada são tratadas, consulte man 3 termios
.
Todas as funções acima podem ser atribuídas (ou reatribuídas) - quando aplicável - como stty
function assigned-key
. Para desativar qualquer função única, faça . Como alternativa, como várias tentativas com atribuições para qualquer uma das funções de edição de linha mencionadas acima, com todas as implementações do GNU, AST ou da herança parecem indicar, você também pode, pois a atribuição NUL para qualquer função parece equiparar a configuração não atribuída no meu linux sistema.stty
function
^-
stty
stty
function
^@
Provavelmente, você vê um eco desses caracteres ao digitá-los (como provavelmente pode ser configurado com [-] ctlecho ) , mas esse é apenas um marcador para mostrar a você o local onde você fez - o programa que recebe sua entrada não faz ideia de que você digitou-os (exceto eol [2] , isto é) e recebe apenas uma cópia de sua entrada na qual a disciplina de linha aplicou seus efeitos.
Uma conseqüência do manuseio do terminal das várias funções de edição de linha é que ele precisa proteger a entrada até certo ponto, a fim de atuar sobre as funções que você indicar que deveria - e, portanto, não pode haver um suprimento ilimitado de entrada que você pode a qualquer momento matar . A linha de tampão é mais precisamente a matança tampão.
Se você definir as EOL ou eol2 caracteres para alguns delimitador que ocorre na entrada - mesmo que nem é uma nova linha ou um caractere de retorno, por exemplo - então você só vai ser capaz de matar até o ponto que ocorreu pela última vez e sua matança tampão vai se estender o máximo possível até a próxima - ou uma nova linha (ou retornar se icrnl estiver definido e igncr não) - ocorrer na entrada.