head trava ou não termina no Linux

1

Estou usando, (uname -a diz) Linux ip-x-x-x-x 2.6.21.7-2.fc8xpt-ec2-v1.0 # 1 SMP Ter Set 1 10:25:30 EDT 2009 x86_64 GNU / Linux.

Eu tenho um script, foo.sh com 100 linhas de código e quando eu corro

head -n 5 foo.sh

o comando apenas "trava" até que eu pressione Ctrl-C.

man head

não dá muita ideia.

O caminho para a cabeça (via qual) é / usr / bin / head

Eu tenho SSH no servidor se isso faz diferença.

Meu shell é / bin / bash.

Uma solução alternativa para usar

sed 5q foo.sh

funciona muito bem, mas gostaria de responder a esta pergunta. Obrigado a todos.

    
por jcarpio 18.09.2013 / 20:53

1 resposta

2

Eu sugeriria que seu head seja linkado por link simbólico para busybox , mas até o busybox funcionará com head -n 5 < foo.sh . (Na verdade, o que eu tentei funciona com head -n 5 foo.sh , mas talvez existam versões que não funcionam.) Ainda assim, parece provável que o head em sua máquina não seja nenhum padrão head . Talvez seja um alias ou uma função de shell.

Nota pequena: É importante (embora nem sempre óbvio) distinguir entre um programa que está "pendurado" e um programa que está simplesmente aguardando a entrada do usuário. O seu está aguardando a entrada do usuário. Isso é diferente, por exemplo, de sleep 3600 ou for ((i=1;i<100000000;++i)); do :; done .

Aqui estão algumas coisas que você pode tentar:

$ type head
head is aliased to 'echo Surprise\!'
#...

$ type head
head is a function
head () 
{ 
    echo surprise\!
}
# ...

$ type head
head is hashed (/usr/local/bin/head)
$ file /usr/local/bin/head
/usr/local/bin/head: POSIX shell script, ASCII text executable

$ type head
head is hashed (/usr/local/bin/head)
$ file /usr/local/bin/head
/usr/local/bin/head: symbolic link to '/bin/busybox'
    
por 19.09.2013 / 00:57