Организация одного сценария с помощью другого

Если у меня есть скрипт, который выполняет следующие

[alice]$ math Enter a number: 5 Number squared: 25 Number divided: 1 Number to power of 3: 125 

И я хочу написать еще один скрипт, который организует вывод из математического скрипта в таблицу, но также может принимать несколько аргументов и не отображать «Число разделено». Например

  [alice]$ newprogram 5 10 * *Number squared power of 3 5 25 125 10 100 1000 

Кроме того, математический скрипт находится в /home/alice а новая программа будет находиться в /home/user . Как я к этому подхожу?

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

Гораздо проще просто написать новую версию скрипта. Размышление о болтовне, как это, является крупной ПИТА.

Вот версия, которая делает это, а также не повторяет оригинальную ошибку печати избыточного вывода (например, заголовков).

 #! /bin/bash for i in "$@" ; do printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i)) done 

И вот версия, которая при необходимости печатает заголовок, если вы используете опцию -v (verbose):

 #! /bin/bash verbose=0 while getopts "v" opt ; do case "$opt" in v) verbose=1 ;; esac done shift "$((OPTIND-1))" [ "$verbose" = "1" ] && printf "%s\t%s\t%s\n" 'Number' 'Squared' 'Power of 3' for i in "$@" ; do printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i)) done 

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

  • Напишите expect -cript, который принимает аргумент, который должен быть отправлен в /home/alice/math .
  • Напишите BASH-скрипт (например, /home/user/newprogram ), который вызывает цикл ожидания в цикле с аргументами, предоставленными вашему BASH-скрипту, и с подстановкой команд, чтобы поймать его вывод.
  • Используйте свой любимый инструмент обработки текста, например grep для извлечения необходимых данных и хранения их в переменных (для этого вам нужно выполнить вывод вывода, который вы выбрали для grep , снова с помощью подстановки команд, чтобы поймать данные, которые команда grep поставляет и сохраняет в переменная).
  • Выведите переменные, которые вы проанализировали на шаге перед этим шагом в таблице.

Эти шаги предполагают наличие доступа к файлам (например, набор бит выполнения и чтения) в /home/alice/math . Конечно, если это не так, можно:

  • Измените разрешения или владельца для /home/alice/math только с chmod или chown .
  • Поместите alice и user в общую группу с достаточными правами, чтобы оба пользователя имели доступ к /home/alice/math .