Сценарий оболочки скрыть консольные сообщения? - PullRequest
1 голос
/ 10 августа 2011

Мне очень трудно скрывать консольные сообщения от моего сценария оболочки (ksh), который я запускаю в фоновом режиме.

Я пытался переместить его в / dev / null, но, похоже, он не работает.Вот строка в сценарии:

pid=`/usr/local/bin/lsof | grep 16752 | grep LISTEN |awk '{print $2}'` > /dev/null 2>&1

Пример после того, как я запустил сценарий:

$ lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.
lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.

$ ls -lsof: WARNING: /home2/s499929/.lsof_ktazd2250 was updated.

Есть идеи о том, что мне не хватает?

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

/usr/local/bin/lsof 2>/dev/null | grep 16752 | grep LISTEN |awk '{print $2}'

0 голосов
/ 10 августа 2011

Вы перенаправляете вывод присвоения переменной.Поскольку присваивание переменных не производит никакого вывода, ваше перенаправление ничего не делает.

Обратные метки фиксируют стандартный вывод команды;вам нужно перенаправить stderr этой команды, что означает, что перенаправление должно быть между обратными чертами.

Моя первая мысль была сделать это:

pid=`/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}' 2>/dev/null`

, но это только перенаправляет stderr изawk команда.Вам нужно отказаться от stderr всего конвейера:

pid=`(/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null`

Но лично я предпочитаю $(...) обратным ссылкам:

pid=$((/usr/local/bin/lsof | grep 16752 | grep LISTEN | awk '{print $2}') 2>/dev/null)

(Обратите внимание, что я перенаправляю только stderr, а не stdout; вам нужен стандартный вывод для назначения переменной.)

0 голосов
/ 10 августа 2011

Может быть, вам нужно перенаправить вывод фактической команды lsof, а не awk?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...