Это также будет обрабатывать процессы, которые выполнялись в течение нескольких дней .. Не знаю, как расширяться в течение недель / месяцев / лет ..
ps -w -e --no-header -o uid,user \
| sort -u \
| while read uid user; do
echo -e "$user\t"$(
ps --no-headers -u $uid --cumulative -o time \
| sed -e s/-/*86400+/ -e s/:/*3600+/ -e s/:/*60+/
| paste -sd+ \
| bc
);
done
Когда скрипт запускается, каждая строка выполняется по одному, и каждый из них должен быть завершен до следующего запуска. Символ & после команды запускает команду в фоновом режиме, позволяя немедленно выполнить следующий оператор, не дожидаясь окончания предыдущего.
Итак, ваш скрипт запускает один экземпляр conky в фоновом режиме, используя файл config1, а затем запускает другой экземпляр conky на переднем плане с помощью файла config2 и затем ждет завершения этого экземпляра перед обработкой следующей строки exit. Если вы измените свой скрипт на наличие & после каждой команды conky, как это ...
#!/bin/bash
conky -c ~/Conky/scripts/config1 &
conky -c ~/Conky/scripts/config2 &
exit
... он не будет ждать, пока они закончит работу перед обработкой команды exit .
Как сказал Джон и Элия, && используется для объединения двух команд вместе со вторым, выполняющим только в том случае, если первый успешно завершен. Обычно это делается из командной строки, а не скрипта. Это объясняет, почему после того, как вы сделали это изменение, второй экземпляр conky никогда не запускался. Первый никогда не заканчивался так, чтобы второй мог начаться.
Надеюсь, что это очистит некоторые вещи.
Что & должен делать? Как вы его используете, он отправит conky -c ~/Conky/scripts/config1 в фоновом режиме.