1

Я использую (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 ответ1

2

Я собирался предположить, что ваша 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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .