Intereting Posts
USB не работает в установщике OpenBSD 5.6 Как проследить java-программу? Создать список ошибок rsync – после факта Запуск сценария bash с php от cron nginx отправлять журнал на удаленный сервер syslog Как разблокировать файловую систему только для чтения на дистрибутиве Linux OpenWRT? Есть ли способ вызвать сообщение, когда команда в / usr / sbin / пытается работать как нерутин? regexp в ksh для расширений tgz, tar.tgz 32-разрядное приложение на 64-битном Linux не работает Linux Mint / Ubuntu – драйверы гибридных графических карт (AMD® Radeon HD 8570 + Intel HD Graphics 4000) Как имитировать Windows, например, пароль администратора в Linux? Терминатор не сохраняет цветовой профиль между расколами и новыми вкладками Как отправить содержимое буфера emacs в gcc без записи на диск? Как разрешить доступ к каталогу и не разрешать доступ к подкаталогу в Apache? Может ли mutt показывать индекс и тело сообщений в горизонтальном разрезе?

запустить сценарий оболочки, откуда он прекратил выполнение

У меня есть сценарий bash, написанный для чтения каждой строки файла, который имеет команды и выполняет их один за другим и останавливается при сбое команды.

while read -r line do $line || exit 1 done< /root/ansi-pb/sample.txt 

sample.txt имеет следующие команды

 echo "hello world" free -m mvn -version date echo "bye" 

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

как я могу это достичь?

 #!/bin/bash echo "$0 $$" ##Here do your stuff and redirect the errors to a log file ##if an error is found say using $?, use the following kill -SIGSTOP $$ ##After you'r done correcting your file ##use kill -SIGCONT <pid> on a console, the process shall continue ## Put in a mechanism to retry the last executed command echo "I am done!!! after SIGSTOP $$" exit 0 

Это всего лишь пример, вы можете реализовать это на своем пути в соответствии с вашими требованиями.

Это устанавливает ERR ловушку:

 trap 'printf "Error for %s, halted, continue with fg\n" "$cmd"; kill -s STOP $$; continue' ERR while IFS= read -r cmd; do command $cmd done <input 

Ловушка запускается с помощью любой ошибки, которая обычно приводит к сбою сценария при запуске в режиме set -e . Ловушка напечатает информационное сообщение и временно остановит процесс.

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

Пока сценарий приостановлен, можно редактировать входной файл. Сценарий продолжит чтение из следующей строки ввода после строки, содержащей неудачную команду.