Comportamento de controle-d estranho

9

Eu posso usar cat como um editor de texto muito simples fazendo cat > foo.txt .
Se eu digitar então:

bar
baz

e depois pressionar ctrl + D , agora se parece com isto:

$ cat > foo.txt
bar
baz^D

com o cursor no ^ . Se eu pressioná-lo mais uma vez, o arquivo será salvo. No entanto, se eu pressionar qualquer coisa (ok, talvez não qualquer coisa, mas principalmente qualquer outra coisa), apenas continuo a editar o arquivo.

Esse comportamento é normal?

    
por Tyilo 21.08.2011 / 04:38

2 respostas

13

Sim. Tem a ver com ^D realmente faz: basta parar a chamada atual read(2) .

Se o programa fizer int rdbytes = read(fd, buffer, sizeof buffer); e você pressionar ^D inbetween, read() retornará com os bytes atualmente lidos no buffer, retornando seu número. O mesmo acontece na terminação da linha; o \n no final é sempre entregue.

Portanto, apenas ^D no início de uma linha ou após a outra ^D tem o efeito desejado de ter read() return 0 , sinalizando EOF.

    
por 21.08.2011 / 06:45
11

Sim, isso é um comportamento normal. Um único Control-D normalmente só aparece se for o começo da linha. Isso sai com um Control-D:

$ cat > foo.txt
bar
baz
^D
    
por 21.08.2011 / 05:03