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

879
jcarpio

Я использую (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 --version`? `Head -n 5 <foo.sh` работает должным образом? Если это так, после `head -n 5 foo.sh`, вызывает ли ввод несколько строк случайного текста, за которыми следует ctl-D, первые 5 строк вашего случайного текста? rici 11 лет назад 0
@rici `head --version` тоже висит! `head -n 5 <foo.sh` не работает. Я все равно попытался набрать текст, и мои персонажи сразу же нашли отражение. jcarpio 11 лет назад 0
Если `head --version` зависает (и у вас нет других проблем,` tail` или подобные программы работают и т. Д.), То это, как сказал @rici, почти наверняка не нормальный `head`, а что-то еще. terdon 11 лет назад 0

1 ответ на вопрос

2
rici

Я собирался предположить, что ваш 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' 
Ах, глава файла дает эту информацию. `ip-xxxx: / usr / bin # file / usr / bin / head / usr / bin / head: исполняемый 64-разрядный LSB ELF, x86-64, версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU / Linux 2.6.8, раздетый jcarpio 11 лет назад 0
@jcarpio: Черт возьми, твое ядро ​​Linux только что отметило свой девятый день рождения! «Голова хеша» показала, что она использует этот путь? Кстати, расследование подобных странностей не должно * делаться * из учетной записи root. Если злоумышленник проник в вашу систему и внедрил неприятности поверх ваших стандартных утилит (или воспользовался плохо настроенным $ PATH), запуск их от имени root мог бы сыграть на руку. rici 11 лет назад 0
ну хэш голова ничего не дает. на данный момент обходной путь sed кажется хорошим. Спасибо за помощь! jcarpio 11 лет назад 0

Похожие вопросы