Отредактируйте сценарий оболочки, в то время как он работает

Можно ли отредактировать сценарий оболочки, в то время как он работает, и имейте влияние изменений под управлением сценарий?

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

Если бы не возможный, там какая-либо оболочка или пакетный механизм, который позволил бы мне делать это?

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

80
задан ack 3 August 2010 в 15:49
поделиться

6 ответов

Скрипты так не работают; исполняемая копия не зависит от редактируемого вами исходного файла. В следующий раз, когда сценарий будет запущен, он будет основан на последней сохраненной версии исходного файла.

Было бы разумно разбить этот сценарий на несколько файлов и запускать их по отдельности. Это сократит время выполнения до отказа. (т. е. разделите пакет на один сценарий сборки, запускающий каждый отдельно, чтобы увидеть, какой из них вызывает проблемы).

-58
ответ дан 24 November 2019 в 10:01
поделиться

У меня не установлен csh, но

#!/bin/sh
echo Waiting...
sleep 60
echo Change didn't happen

Запустите его, быстро отредактируйте последнюю строку, чтобы она читалась

echo Change happened

Вывод:

Waiting...
/home/dave/tmp/change.sh: 4: Syntax error: Unterminated quoted string

Hrmph.

Я полагаю, что изменения в сценариях оболочки не вступят в силу, пока они не будут запущены повторно.

1
ответ дан 24 November 2019 в 10:01
поделиться

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

1
ответ дан 24 November 2019 в 10:01
поделиться

Обычно редактировать ваш скрипт во время его работы бывает нечасто. Все, что вам нужно сделать, это поставить контроль над своими операциями. Используйте операторы if / else для проверки условий. Если что-то не получится, сделайте это, иначе сделайте то. Это путь.

-5
ответ дан 24 November 2019 в 10:01
поделиться

Я не слышу ... но как насчет некоторой косвенности:

BatchRunner.sh

Command1.sh
Command2.sh

Command1.sh

runSomething

Command2 .sh

runSomethingElse

Тогда вы сможете редактировать содержимое каждого командного файла до того, как BatchRunner доберется до него правильно?

ИЛИ

В более чистой версии BatchRunner будет искать один файл, где он будет последовательно запускать одну строку на время. Тогда вы сможете редактировать этот второй файл во время работы первого, верно?

0
ответ дан 24 November 2019 в 10:01
поделиться

Разбейте ваш скрипт на функции, и каждый раз, когда вызывается функция, вы исходники ее из отдельного файла. Тогда вы сможете редактировать эти файлы в любое время, а ваш работающий скрипт подхватит изменения при следующем обращении к нему.

foo() {
  source foo.sh
}
foo
17
ответ дан 24 November 2019 в 10:01
поделиться
Другие вопросы по тегам:

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