Я Rsyncing несколько каталогов. У меня открыт терминал Bash, и я выполняю что-то вроде этого:
for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done
Однако, если я хочу остановить все это, я нажимаю Control-C. Это останавливает rsync, но затем продолжает идти к следующему. В этом случае я понимаю, что произошло, а затем просто нажимаю Control-C, как сумасшедший, пока все снова не заработает.
Есть ли какой-нибудь способ это исправить. Я хочу, чтобы, если у меня был такой цикл, и я нажал Control-C, он вернул меня в оболочку bash.
Ответы:
Это также приведет к выходу из цикла, если по какой-либо причине отдельный прогон rsync завершится неудачно.
источник
break 2
(или замените «2» на количество вложенных циклов, которое вы хотите завершить).Чтобы расширить ответ Дениса, ваш код может выглядеть так:
Для рабочего примера (который включает в себя rsync), посмотрите http://gist.github.com/279849 .
источник
Вы можете установить ловушку для Control-C.
будет выполнять при
command
нажатии Control-C. Просто поместитеtrap
утверждение где-нибудь в своем сценарии в точку, где вы хотите, чтобы оно вступило в силу.источник
Ctrl-Z
чтобы приостановить сценарий;kill %%
Кредиты, объяснения и более подробную информацию в этом ответе .
источник
Когда вы помещаете строку команд в круглые скобки, строка будет действовать как отдельный процесс, получит SIGINT и завершится, когда вы нажмете Ctrl- C:
Но! В случае
rsync
команды она допускает несколько источников, поэтому написанный вами код будет написан лучше:источник
Я склонен помещать в свой цикл другую команду, которая может быть легко прервана. Это требует двух Ctrl-C для нажатия.
Это не очень хорошее решение для этого rsync, который вы, вероятно, хотите запустить быстро. Но это хорошо работает для других циклов, как этот:
Этот цикл будет пересматривать адрес example.com каждый раз в цикле, что полезно, если вы наблюдаете за изменением DNS.
источник