скрипт (.sh) не будет завершен

Это также будет обрабатывать процессы, которые выполнялись в течение нескольких дней .. Не знаю, как расширяться в течение недель / месяцев / лет ..

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
0
задан 17 April 2012 в 20:58

2 ответа

Когда скрипт запускается, каждая строка выполняется по одному, и каждый из них должен быть завершен до следующего запуска. Символ & после команды запускает команду в фоновом режиме, позволяя немедленно выполнить следующий оператор, не дожидаясь окончания предыдущего.

Итак, ваш скрипт запускает один экземпляр conky в фоновом режиме, используя файл config1, а затем запускает другой экземпляр conky на переднем плане с помощью файла config2 и затем ждет завершения этого экземпляра перед обработкой следующей строки exit. Если вы измените свой скрипт на наличие & после каждой команды conky, как это ...

#!/bin/bash

conky -c ~/Conky/scripts/config1 &
conky -c ~/Conky/scripts/config2 &

exit

... он не будет ждать, пока они закончит работу перед обработкой команды exit .

Как сказал Джон и Элия, && используется для объединения двух команд вместе со вторым, выполняющим только в том случае, если первый успешно завершен. Обычно это делается из командной строки, а не скрипта. Это объясняет, почему после того, как вы сделали это изменение, второй экземпляр conky никогда не запускался. Первый никогда не заканчивался так, чтобы второй мог начаться.

Надеюсь, что это очистит некоторые вещи.

0
ответ дан 25 May 2018 в 12:36
  • 1
    Спасибо за подробное объяснение. Я внес изменения, и он работает отлично. Еще раз спасибо. Есть ли какой-нибудь документ, книга или веб-сайт, который вы могли бы порекомендовать для изучения базового программирования в Linux? – user18432 18 April 2012 в 20:49
  • 2
    Если вы хотите узнать больше о сценариях Bash, вот хорошее руководство для начинающих: howtogeek.com/67469/… Если вы хотите изучить еще несколько программ общего назначения, Python довольно легко начните с: ru.wikibooks.org/wiki/… – Ramón 18 April 2012 в 21:40

Что & должен делать? Как вы его используете, он отправит conky -c ~/Conky/scripts/config1 в фоновом режиме.

2
ответ дан 25 May 2018 в 12:36
  • 1
    Да. Если ваше намерение состояло в первом запуске conky -c ~/Conky/scripts/config1, а затем, если он завершит без прогона ошибки conky -c ~/Conky/scripts/config2, соединитель, который вы хотите использовать, && не &. – irrational John 17 April 2012 в 21:15
  • 2
    Спасибо, как я уже сказал, я действительно мало знаю о написании программ, поэтому я использовал " & amp; " вместо "& amp; & amp; " из-за незнания. Спасибо за информацию, я ценю ее. – user18432 17 April 2012 в 23:48
  • 3
    Хорошо, когда я ставлю & amp; & amp; " вместо " & amp; " вторая часть сценария никогда не запускается. – user18432 18 April 2012 в 00:06
  • 4
    @ user18432 Если вы хотите запустить вторую команду, пока первая команда все еще запущена, тогда & - это то, что вы хотите. Первая команда не будет завершена до тех пор, пока conky не выйдет, поэтому, если вы хотите, чтобы вторая команда выполнялась до выхода conky, вы можете использовать &&. Затем вторая команда выполнит , если первый экземпляр conky сообщил, что он успешно выполнил . Но вы действительно хотите запустить 2 экземпляра conky одновременно? Если вы хотите запустить conky один раз, с двумя конфигурационными файлами (config1 и config2), вы можете попробовать conky -c config1 -c config2 (я не уверен, что это сработает). – Eliah Kagan 18 April 2012 в 00:43

Другие вопросы по тегам:

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