Завершить сценарий, но разрешить выполнение текущей программы

Вот что делает autoread:

:help autoread
When a file has been detected to have been changed outside of Vim and                      
it has not been changed inside of Vim, automatically read it again.                        
When the file has been deleted this is not done.

Однако я должен признать, что это никогда не работало удовлетворительным образом для меня. В зависимости от того, имеет фокус vimили нет, это может работать, а может и не работать. Эта функция полностью сломалась для меня при использовании мозаичного оконного менеджера. Но попробуйте, может быть, это сработает для вас. В противном случае на рынке есть более разумные альтернативы.

1
13.08.2019, 19:35
2 ответа

Вы можете запустить процесс в фоновом режиме, а затем дождаться его завершения перед запуском следующего цикла. Это позволит вам убить цикл, не убивая процесс python.

while : ; do
  python3 my_program.py &
  while true; do
    kill -0 %1 || break
    sleep 1
  done
done

Затем простоC-C(ctrl -c ), чтобы прервать цикл.

kill -0означает не убивать на самом деле, а выйти с ошибкой кода, если нечего (не )убивать.

1
27.01.2020, 23:22

Вы можете перехватить SIGINTв свой скрипт и установить условие выхода из цикла. Запуск вашей программы с setsidпредотвращает получение SIGINTот CTRL + C

#! /bin/bash

STOPFILE=/tmp/stop_my_program

rm -f $STOPFILE

trap "touch $STOPFILE" INT

while [ ! -f $STOPFILE ]
do
     setsid python3 my_program.py
done

rm -f $STOPFILE
3
27.01.2020, 23:22

Теги

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