запустить bash-скрипт из другого скрипта и перенаправить его вывод

запустить bash-скрипт из другого скрипта и перенаправить его вывод

Привет всем, мне нужно сделать программу... Я постараюсь объяснить ее очень кратко... И что я уже сделал, и что мне еще предстоит сделать...

Проще говоря, мне нужно создать «симулятор» в Bash, который запускает упражнения студентов и проверяет их правильность... Для каждого упражнения мне нужно подсчитать баллы и сказать, сдал студент экзамен или нет...

Я сделал почти все... Думаю, мне не хватает только нескольких строк кода, которые нужно написать... но я думаю, что они самые важные... :(

Мой сценарий — TEST.SH, и я должен запустить упражнение студента. Упражнение — сценарий ELABORATO.SH... Теперь у меня может быть несколько сценариев:

  1. ELABORATO.SH ожидает ввода в качестве параметра некоторых значений;
  2. ELABORATO.SH ожидает ввода со стандартного ввода, с клавиатуры;
  3. ELABORATO.SH записать вывод в файл/fifo/etc.. ;

  1. Во-первых, это очень просто решить... на самом деле из моего TEST.SH я вызываю ELABORATO.SHследующим образом:

    . ELABORATO.SH param1 param2 param3;
    

    Второе и третье Для меня это сложнее..

  2. Мне нужно прочитать из файла строку (и это нормально) и передать эту строку, ELABORATO.SHкак будто она была из stdin.

  3. Мне нужно создать файл с выводом ELABORATO.SH... так, например, если ELABORATO.SHсоздать файл (я не знаю имени выходного файла), мне нужно создать файл также, в другом каталоге... Как мне это сделать?

решение1

Это подозрительно похоже на домашнее задание*, но поехали.

  1. Зачем вам исходный код ELABORATO.SHскрипта? Если вы это делаете и у вас есть exitоператор или ошибки, ваш TEST.SHделает то же самое. Я не думаю, что это то, что вам нужно. Я бы просто запустил скрипт:

    bash ELABORATO.SH param1 param2
    
  2. Вы думали о перенаправлении ввода?

    bash ELABORATO.SH param1 param2 < INPUT_FILE
    
  3. Чтобы захватить вывод ELABORATO.SH, ну, разве перенаправление не кажется простосделалдля этого?

    bash ELABORATO.SH param1 param2 < INPUT_FILE > OUTPUT_FILE
    

Выяснить, какие файлы ELABORATO.SHзаписываются, нетривиально. (Дополнительный момент: если вы не знаете его выходные файлы, то как они могут быть связаны с вычислением оценки ELABORATO.SH? Зачем вообще их перемещать?)

Ну, вот и все. Следующий конвейер перечисляет файлы, созданные ELABORATO.SH:

strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE \
    | grep '^open(.*O_CREAT' | cut -d\" -f 2  

Затем, чтобы переместить их в другое место, вы можете сделать следующее:

for f in $(
    strace bash ELABORATO.SH params < INPUT_FILE 2>&1 > OUTPUT_FILE 
       | grep '^open(.*O_CREAT' | cut -d\" -f 2) 
do
    mv "$f" /path/to/elsewhere
done

*) Пожалуйста, порекомендуйте своему руководителю дружелюбных людей из AskUbuntu.

Связанный контент