17

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

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

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

Но что, если я наберу только:

wget http://example.com/file.rar

5 ответов5

31

Вы можете сделать что-то вроде этого:

  1. остановить выполнение wget с помощью ctrl-z (он не остановлен, он приостановлен)
  2. положить его в фоновом режиме (BG)
  3. бежать: ждать; выключение -h сейчас

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

После окончания ожидания отключение будет продолжено.

10

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

ps -u <your username> | grep wget

чтобы найти PID команды, которую вы хотите подождать, затем

wait <PID>; shutdown -h now

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

4

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

fg; echo "Done!"

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

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

РЕДАКТИРОВАТЬ: Это не будет работать с sudo, потому что он попросит ваш пароль. Соответственно, я удалил примеры, используя sudo. Если вам нужно sudo для второго задания, используйте другой из методов, размещенных здесь.

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

1

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

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

1

Если вы хотите стать модным, проверьте статус возврата wget и выключите его только в случае успеха.

% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .