Голова висит или не заканчивается в Linux

Я использую, (uname -a говорит) Linux ip-xxxx 2.6.21.7-2.fc8xen-ec2-v1.0 #1 SMP Tue 1 сентября 10:25:30 EDT 2009 x86_64 GNU/Linux.

У меня есть скрипт foo.sh со 100 строками кода и при запуске

голова -n 5 foo.sh

команда просто "зависает", пока я не нажму Ctrl-C.

мужская голова

не дает особого понимания.

Путь к голове (через который) - /usr/bin/head

Я SSH-на сервер, если это имеет значение.

Моя оболочка - /bin/bash.

Обходной путь для использования

Sed 5q foo.sh

прекрасно работает, но я хотел бы получить ответ на этот вопрос. Спасибо всем.

1 ответ

Я собирался предположить, что ваш head связан с busybox, но даже busybox будет работать с head -n 5 < foo.sh, (На самом деле, тот, который я пробовал, работает с head -n 5 foo.sh, но, возможно, есть версии, которые этого не делают. Тем не менее, вполне вероятно, что head на твоей машине нет ни одного стандарта head, Возможно, это псевдоним или функция оболочки.

Небольшое примечание: важно (хотя и не всегда очевидно) различать "зависающую" программу и программу, которая просто ожидает ввода пользователя. Ваш ждет ввода пользователя. Это отличается от, например, sleep 3600 или же for ((i=1;i<100000000;++i)); do :; done,

Вот несколько вещей, которые вы можете попробовать:

$ 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'
Другие вопросы по тегам