Привет всем, мне нужно сделать программу... Я постараюсь объяснить ее очень кратко... И что я уже сделал, и что мне еще предстоит сделать...
Проще говоря, мне нужно создать «симулятор» в Bash, который запускает упражнения студентов и проверяет их правильность... Для каждого упражнения мне нужно подсчитать баллы и сказать, сдал студент экзамен или нет...
Я сделал почти все... Думаю, мне не хватает только нескольких строк кода, которые нужно написать... но я думаю, что они самые важные... :(
Мой сценарий — TEST.SH, и я должен запустить упражнение студента. Упражнение — сценарий ELABORATO.SH... Теперь у меня может быть несколько сценариев:
- ELABORATO.SH ожидает ввода в качестве параметра некоторых значений;
- ELABORATO.SH ожидает ввода со стандартного ввода, с клавиатуры;
- ELABORATO.SH записать вывод в файл/fifo/etc.. ;
Во-первых, это очень просто решить... на самом деле из моего TEST.SH я вызываю
ELABORATO.SH
следующим образом:. ELABORATO.SH param1 param2 param3;
Второе и третье Для меня это сложнее..
Мне нужно прочитать из файла строку (и это нормально) и передать эту строку,
ELABORATO.SH
как будто она была из stdin.Мне нужно создать файл с выводом
ELABORATO.SH
... так, например, еслиELABORATO.SH
создать файл (я не знаю имени выходного файла), мне нужно создать файл также, в другом каталоге... Как мне это сделать?
решение1
Это подозрительно похоже на домашнее задание*, но поехали.
Зачем вам исходный код
ELABORATO.SH
скрипта? Если вы это делаете и у вас естьexit
оператор или ошибки, вашTEST.SH
делает то же самое. Я не думаю, что это то, что вам нужно. Я бы просто запустил скрипт:bash ELABORATO.SH param1 param2
Вы думали о перенаправлении ввода?
bash ELABORATO.SH param1 param2 < INPUT_FILE
Чтобы захватить вывод
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.