как выполнить команду после текущей рабочей команды в ударе?

Я загружаю файл wget, и я хочу выключить свой компьютер после того, как загрузка будет закончена, но я должен пойти куда-нибудь теперь :) Действительно ли возможно выполнить команду в ударе exacly, когда процесс будет закончен?

Я знаю, что это работает:

wget http://example.com/file.rar; shutdown now

Но что, если я ввожу только:

wget http://example.com/file.rar
18
задан 03.09.2009, 22:06

5 ответов

Можно сделать что-то вроде этого:

  1. остановите выполнение wget с ctrl-z (это не останавливается, это приостановлено),
  2. поместите его в фон (bg)
  3. выполненный: ожидайте; завершите работу-h теперь

ожидание будет ожидать всех программ, работал в фоне от текущей оболочки - т.е. этот wget.

После того, как ожидание закончится - завершение работы продолжится.

31
ответ дан 07.12.2019, 10:23
  • 1
    не забывает к переднему плану (fg) Ваш wget экземпляр при выполнении. Если wget уже работает, можно поместить его в передний план с ^z (управление-z). – Andrew Scagnelli 03.09.2009, 22:31
  • 2
    Никакая потребность, если Вы действительно не хотите видеть индикатор выполнения. – dmckee 03.09.2009, 22:32

В другой оболочке использовать

ps -u <your username> | grep wget

для нахождения PID команды, Вы хотите ожидать на, затем

wait <PID>; shutdown -h now

так, чтобы завершение работы не работало, пока процесс не завершился. См. также ответ depesz.

11
ответ дан 07.12.2019, 10:23

Мои решения - это: приостановите свою продолжительную задачу с Control+Z, затем введите что-то как:

fg; echo "Done!"

Если Вы хотите работать, реагируют по-другому на основе успешности или неуспешности Вашей команды, используют && и || как операторы короткого замыкания.

fg && echo "Success!" || echo "Failure!"

Править: Это не будет работать с sudo, потому что он попросит Ваш пароль. Я, соответственно, удалил примеры с помощью sudo. При необходимости в sudo для второй задачи используйте другой из методов, отправленных здесь.

С другой стороны, я полагаю, что и GNOME и KDE предлагают способы инициировать завершение работы/перезагрузку, не используя sudo путем отправки соответствующего сигнала D-шины или чего-то.

4
ответ дан 07.12.2019, 10:23

Да, просто выведите свою вторую команду и нажмите Enter. Если Ваша текущая программа прокручивает текст, Вы не видите то, что Вы вводите правильно, так наблюдайте свои ключи, таким образом, Вы делаете его правильно.

Более умный путь состоит в том, чтобы переключиться на другой TTY (CTRL+ALT+F1 через F6) и выполнить команду одновременно, или если Вы используете программу командной строки, любят экран, Вы могли бы создать новое окно в нем.

1
ответ дан 07.12.2019, 10:23
  • 1
    +1 для первой опции. Я боюсь, что не понимаю, как вторая опция, как предполагается, работает. А-ч – innaM 03.09.2009, 22:16
  • 2
    Нажатие, например, CTRL+ALT+F2 переключит Вас на новую вторую консоль, где можно войти и ввести команду, таким образом можно выполнить вторую команду туда. Во-вторых при загрузке экрана (программа для использования консоли более необычным способом), можно открыть вторую вкладку/окно, где можно снова ввести команды, не имея необходимость входить в систему снова. Но поскольку Вам нужен он одновременно, можно остаться с опцией 1, я не думаю, что существует другой способ достигнуть того же эффекта. Если Вы не используете другой TTY/window для пересылки багажом багажом сценария, если процесс все еще работает. :-P – Tamara Wijsman 04.09.2009, 10:34

Если Вы хотите стать необычными, проверьте статус возврата wget и только завершите работу, если это было успешно.

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi
1
ответ дан 07.12.2019, 10:23
  • 1
    Это - хороший подход при сценариях, но в то время как wget выполнения Вы не возвращаете подсказку для создания теста. – dmckee 03.09.2009, 22:35

Теги

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