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

Я супер новичок в этой области, поэтому заранее извиняюсь за любую глупость, которую могу сказать! :D

Я работаю с RTL-компилятором Cadence и пытаюсь автоматизировать процесс синтеза множества дизайнов разных размеров, расположенных в разных каталогах, а также создавать отчеты и сохранять их в каждой папке. Я использую сценарии tcl для запуска команд программы RTL внутри терминала Linux.

Во-первых, мне нужно выполнить некоторые инициализации вне среды RTL. Поэтому я создал файл сценария с именем setup.tcl, который я вызываю из терминала Linux, а затем вызываю саму программу RTL (rc):

source setup.tcl
rc

Это запустит программу компилятора RTL внутри того же терминала, так что теперь можно будет вводить команды компилятора.

rc:/>

Теперь мне нужен скрипт для команд RTL с именем rtl_script.tcl, чтобы запускать все команды в среде RTL, и он будет отлично работать:

rc:/>source rtl_script.tcl

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

Точнее, необходим мастер-скрипт с именем master.tcl, который сначала запускает setup.tcl, открывает компилятор RTL, а затем запускает rtl_script.tcl. > внутри среды rc. Все делается в одном терминале. Что-то типа:

source setup.tcl
rc
source rtl_script.tcl

Проблема в том, что когда я ввожу команду source master.tcl, оболочка останавливается после входа в среду RTL и не запускает rtl_script.tcl. Любая помощь будет оценена по достоинству. Спасибо.


person Arash Ashrafi    schedule 31.07.2015    source источник
comment
Можете ли вы дать rc скрипт для запуска в командной строке? Как rc rtl_script.tcl возможно?   -  person Etan Reisner    schedule 31.07.2015
comment
Дальнейшее объяснение заголовка: я полагаю, что запуск команды rc запустит новую оболочку внутри того же терминала. Таким образом, под новой оболочкой я подразумеваю после открытия компилятора RTL, а под скриптом я подразумеваю master.tcl.   -  person Arash Ashrafi    schedule 31.07.2015
comment
Да, я понял. Проблема здесь та же, что и у людей, которые спрашивают о том, как запускать команды внутри удаленной оболочки, которую они получают от запуска ssh, и ответ - использовать ssh ... <commands to run>, поэтому я спросил, может ли rc сделать то же самое.   -  person Etan Reisner    schedule 31.07.2015
comment
Извините за чрезмерное объяснение, @Ethan. Я пробовал это, и, к сожалению, это не работает.   -  person Arash Ashrafi    schedule 31.07.2015
comment
Если вы не можете заставить его делать это автоматически, вам, вероятно, нужно будет использовать что-то вроде expect для автоматизации.   -  person Etan Reisner    schedule 31.07.2015
comment
@EtanReisner Я нашел решение, и ваш первый комментарий дал мне отличное направление для этого. Большое спасибо! Извините за неправильное написание вашего имени ранее.   -  person Arash Ashrafi    schedule 07.08.2015


Ответы (1)


Я разместил этот вопрос и подумал, что ответ должен иметь какое-то отношение к разным оболочкам. Но все, что мне нужно было сделать, как сказал мне @EtanReisner, это дать команде rc сценарий для запуска, но правильный синтаксис такой:

rc -file rtl_script.tcl

Если вы хотите, чтобы ваш мастер-скрипт продолжал работать после завершения rc, вы должны иметь команду exit в конце rtl_script.tcl скрипта. Мне пришлось внимательно изучить документацию Cadence.

person Arash Ashrafi    schedule 07.08.2015