Решено: Как заставить выполнятся команду (femon | head -3 | tail -1 | awk '{print $2}')

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Серёга
Сообщения: 201
ОС: Windows XP

Решено: Как заставить выполнятся команду

Сообщение Серёга »

Вот здесь http://vsevolod.balashov.name/2007/2/28/dvb-sat-linux автор написал скрипт для автоматического (через cron) передёргивания DVB платы если та вдруг заснёт или зависнет.

Код: Выделить всё

#!/bin/sh

# если статус карты не 1f значит она не залочена.
if [ '1f' != `femon | head -3 | tail -1 | awk '{print $2}'` ]; then
        invoke-rc.d dvbd reload
else
#если карта залочена, а нету пидов с трафиком значит она повисла.
        if [ '10' != `dvbtraffic | head -10 | wc -l` ]; then
                invoke-rc.d dvbd restart
        fi
fi
Но этот скрипт не может у меня выполнится. Я пробовал в консоле выполнить отдельно каждую команду:
команда

Код: Выделить всё

dvbtraffic | head -10 | wc -l
выполняется нормально - выводит 10, а команда

Код: Выделить всё

femon | head -3 | tail -1 | awk '{print $2}'
не выполняется - просто консоль чего-то ждёт и всё, а должна по идее получить в ответ 1f
Если я даю просто команду femon (без фильтров то она нормально выполняется)

Код: Выделить всё

[root@server ~]# femon
using '/dev/dvb/adapter0/frontend0'
FE: ST STV0299 DVB-S (SAT)
status 1f | signal 8564 | snr bfd0 | ber 000021b3 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 85c0 | snr bfc7 | ber 00000008 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 873e | snr c02d | ber 00000011 | unc 00000000 | FE_HAS_LOCK

[root@server ~]#
Как заставить её выполнится?

Дистрибутив Mandriva 2007 PP+
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Как заставить выполнятся команду

Сообщение sash-kan »

прогони последовательно весь конвейер, чтобы стало виднее, где затык:
femon | head -3
femon | head -3 | tail -1
femon | head -3 | tail -1 | awk '{print $2}'
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Серёга
Сообщения: 201
ОС: Windows XP

Re: Решено: Как заставить выполнятся команду

Сообщение Серёга »

прогони последовательно весь конвейер, чтобы стало виднее, где затык:
femon | head -3
femon | head -3 | tail -1
femon | head -3 | tail -1 | awk '{print $2}'
пробовал я это делать ещё сразу - стопорится на первой команде

Код: Выделить всё

femon | head -3
кстати не может даже выполнить команду без аргумента (-3)

Код: Выделить всё

femon | head
в head help написано что если не указывать аргумет то подразумевается 10
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Как заставить выполнятся команду

Сообщение sash-kan »

а
head -n 3
?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: Как заставить выполнятся команду

Сообщение Uncle_Theodore »

Еслинственное, что приходит в голову, это что дело не в head'е, а в пайпе.
Может, femon этот не на standard out пишет, а на standard error?
Если вот так
femon 2>&1 | head
что выйдет?
Спасибо сказали:
Серёга
Сообщения: 201
ОС: Windows XP

Re: Решено: Как заставить выполнятся команду

Сообщение Серёга »

а
head -n 3
?
то же так не работает
Еслинственное, что приходит в голову, это что дело не в head'е, а в пайпе.
Может, femon этот не на standard out пишет, а на standard error?
Если вот так
femon 2>&1 | head
что выйдет?
попробовал так - то же самое просто чего - то ждёт

Я думаю что команда femon даёт всё таки на standard out т.к. если я её запускаю просто без фильтров то она нормально выполняется, пока я я её не прерву командой Ctrl-C. что можно видеть в последней секции кода в первом моём сообщенни в этой теме.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: Решено: Как заставить выполнятся команду

Сообщение nesk »

Серёга писал(а):
05.05.2007 23:34
то же так не работает
попробовал так - то же самое просто чего - то ждёт

Я думаю что команда femon даёт всё таки на standard out т.к. если я её запускаю просто без фильтров то она нормально выполняется, пока я я её не прерву командой Ctrl-C. что можно видеть в последней секции кода в первом моём сообщенни в этой теме.



Ок, а давайте глянем чего и кто ждет

femon | head &
ps -l

что видим?

Серёга писал(а):
05.05.2007 23:34
. если я её запускаю просто без фильтров то она нормально выполняется, пока я я её не прерву командой Ctrl-C.


Так бы сразу и сказал :)

ну сделай так
femon > /tmp/femon.out
PID_FEMON=$!
sleep 1
kill $PID_FEMON
cat /tmp/femon.out | head .... ну и тд
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Серёга
Сообщения: 201
ОС: Windows XP

Re: Решено: Как заставить выполнятся команду

Сообщение Серёга »

Короче снимаю вопрос - всё оказалось довольно просто - надо было просто подождать примерно с 20 секунд. (команда выполнилась и весь фильтор сработал как и положенно)

Незнаю почему такой большой промежуток времени она выполняется - может из-за того что комп слабый Celeron 533Mhz 128Mb ОЗУ и S3Trio 4Mb видео карта - на нём стоит Mandriva 2007 PP+ c X и KDE

либо незнаю причину медлительности в 20 секунд.
Спасибо сказали: