Как проверить в скрипте, запущен ли емерж? [SOLVED]

Есть скрипт для показания прогресса сборки, но потребвалось вставить в него проверку -работает ли емерж.И какие-то грабли!
Pidof, ps aux, pgrep -ничего не работает как надо.То "ожидается использвание унарного оператора", то "слишком длинный список аргументов", то просто не работает.
Вот такой вариант рабочий

#!/bin/bash

if [ `pgrep emerge` ] >/dev/null 2>&1; then
   exit
else
   tail -n 50 /var/log/emerge.log|tac|grep -v "Starting retry"|
   grep -iE '([0-9]* of [0-9]*)' -o -m 1|
   sed 's/\(.*\) of \(.*\)/\1 \2/'|
   awk '{print 100.0*$1/$2}' 
fi

-но плохо,проверка нормально не работает а этим >/dev/null 2>&1 ругань посылается в дев-нуль.Подозреваю что может из-за того что он на питоне.
Вобщем, как это правильно проверить?

А если так?

if [ `ps aux | grep -c 'emerge'` -lt 1 ]; then
   exit 2 # Или что Вам заблагорассудится :)
else
    tail -n 50 ....
fi

Нет, не работает. Выводит

Нет, не работает.
Выводит 100, чего быть не должно.
Собственно ps aux | grep -c 'emerge' c незапушенным емержем выводит 1, -gt 0 вобще не работает.

Это я ошибся.

При работающем emerge у меня ps aux | grep -c 'emerge' выводит 2.
(Проверял командой emerge --pretend --update --newuse --deep world)

У меня тоже.Но при -lt 2 всё

У меня тоже.Но при -lt 2 всё равно не работает, выводится 100, резуьтат команд после else которые не должны выполняться.

У меня отрабатывает успешно о_О

Может быть алиасы или другие настройки в .bashrc мешают?

Нет, у рута тоже не

Нет, у рута тоже не работает.

А у рута вобще bashrc не оказалось почему-то!(0_0) Значит он системный юзает, надо-таки сделать ему свой...

...

Конечно, будет выводить "2"

Попробуйте ps aux | grep 'emerge' и увидете, почему так.

>_<

  -c, --count
              Suppress normal output; instead print a count of matching lines for each input file.

а эта строка - это просто подпись

genlop -c ?

genlop -c ?

У меня не установлен.Из-за

У меня не установлен.Из-за одного скрипта ставить его глупо.

Вот

#!/usr/bin/python
import subprocess, sys
ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE).communicate()[0]
processes = ps.split('\n')
nfields = len(processes[0].split()) - 1
for row in processes[1:]:
    line = row.split(None, nfields)
    try:
        if line[nfields].find('/usr/bin/emerge') > 0:
            print 1
            sys.exit(0)
    except IndexError, e: pass
print 0

а эта строка - это просто подпись

Тоже не работает.Выводит ноль

Тоже не работает.Выводит ноль и при запушенном и при не запушенном емерже.
Да и ещё и питон, фу.

.

Этого не может быть.
У вас либо кривой питон, либо кривой ps
у вас по ps aux | grep emerge видно "/usr/bin/python2.6 /usr/bin/emerge имя пакета"?

а эта строка - это просто подпись

Вот-вот!Это меня и пугает- то

Вот-вот!Это меня и пугает- то что где-то, что-то не так видимо.Но всё ведь работает.Что и как проверять даже не знаю.

P.S.Немного поспешил- через sudo работает.Но это не вариант, должно юзером проверятся.И юзер в группе portage вобще-то состоит.

P.P.S.
>у вас по ps aux | grep emerge видно "/usr/bin/python2.6 /usr/bin/emerge имя пакета"?

При запущенном видно.

Пальцем в небо :)

Может быть стоит "кореутиль" (sys-apps/coreutils) пересобрать?
Ой... Я по-моему "не в тот лес пошёл" %)

if pgrep -f

if pgrep -f '/usr/bin/emerge'; then
    echo emerge is running
else
    echo emerge is not running
fi

if pgrep -f "$(eselect python

if pgrep -f "^$(python-config --exec-prefix)/bin/$(eselect python show) /usr/bin/emerge"; then
    echo emerge is running
else
    echo emerge is not running
fi

так лучше

Да, вот это рабочий

Да, вот это рабочий вариант.
Тоже пришлось добавить >/dev/null 2>&1 , но не из-за ругани а стандартное подавление вывода.Вот так в итоге

#!/bin/bash

if pgrep -f '/usr/bin/emerge' >/dev/null 2>&1; then
   tail -n 50 /var/log/emerge.log|tac|grep -v "Starting retry"|
   grep -iE '([0-9]* of [0-9]*)' -o -m 1|
   sed 's/\(.*\) of \(.*\)/\1 \2/'|
   awk '{print 100.0*$1/$2}'
else
   exit
fi

Спасибо, решено.

вообще если вы используете

вообще если вы используете "тяжелую артилерию" (я имею ввиду awk), то наверное логичней всю цепочку tail|grep|sed|awk реализовать с помощью одного вызова awk.

Я его не знаю и не люблю.По

Я его не знаю и не люблю.По мне так выкинуть бы его вобще, всё сидом, например, сделать.Но думать надо (а думать сложно (^_^)), а может и невозможно.
Чем его меньше, тем лучше.

P.S.Вот, выкинул -теперь так

#!/bin/bash

if pgrep -f '/usr/bin/emerge' >/dev/null 2>&1; then
   tail -n 50 /var/log/emerge.log|tac|grep -v "Starting retry"|
   grep -iE '([0-9]* of [0-9]*)' -o -m 1|
   sed 's/\(.*\) of \(.*\)/100\*\1\/\2/'|bc
else
   exit
fi

-вроде работает,7 пакетов genlop верно показал.Awk тут ненужен )

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".