Как интегрировать несколько сценариев Python / Perl для исполнения в одном сценарии bash?

У меня есть следующие скрипты Perl (хотя это относится и к Python и другим языкам сценариев): script1.pl , script2.pl , script3.pl

Способ написания этих сценариев, пользователи выполняют их с входными флагами, а выход – это файл.

 perl script1.pl --i input1.tsv ## this outputs the file `outputs1` perl script2.pl --i outputs1 ## this outputs the file `outputs2` perl script3.pl --i outputs2 ## this outputs the file `final_output` 

Теперь я хотел бы создать исполняемый скрипт bash, который позволяет пользователям просто работать с input1 и получать выходные данные в final_output .

Вот как я мог бы сделать это только с одним скриптом perl, execute.sh :

 #!/bin/sh source ~/.bash_profile FLAG1="--i=$1" perl script1.pl $FLAG1 

который можно запустить в командной строке execute.sh input1.tsv

Для моего примера с тремя сценариями, как я мог бы execute.sh промежуточные выходы в промежуточные скрипты, чтобы создать один скрипт execute.sh , например, outputs1 в script2.pl , а затем outputs2 в scripts3.pl и т. Д.?

Разве нет способа сделать это, не переписывая скрипты perl / python?

2 Solutions collect form web for “Как интегрировать несколько сценариев Python / Perl для исполнения в одном сценарии bash?”

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

Единственный дополнительный код, который вы, возможно, захотите, – это что-то, чтобы очистить временные файлы, созданные script1.pl и script2.pl . Кроме того, вы можете использовать абсолютные пути для указания script{1,2,3}.pl live.

 #!/bin/sh trap 'rm outputs1 outputs2' EXIT perl script1.pl --i "$1" perl script2.pl --i outputs1 perl script3.pl --i outputs2 

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

 execute.sh input1.tsv 

по желанию.

Вы не можете настроить каналы между тремя сценариями, потому что они кажутся жестко закодированными для создания определенных выходных файлов.

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

Вы можете создать временный каталог в каталоге /tmp или в каталоге активного пользователя. Добавьте к концу скрипта команду, которая приведет к срыву директории. Если вы хотите, чтобы любые выходные файлы сохранялись в другом месте, вы можете скопировать их в нужное время в нужное место.

  • bash: test, если $ WORD находится в наборе
  • Приближение числа с плавающей запятой с правильным округлением
  • Окно GTK gtkdialog для создания ссылки
  • Подавлять предупреждения от MySQL в сценарии оболочки, но допускать ошибки
  • В командной строке я могу перенаправить вывод в файл WITHOUT>, >> или | операторы?
  • вырезание разных слов с вывода
  • Как извлечь URI из файлов
  • Может кто-нибудь объяснить эту строку кода / команды, пожалуйста?
  • Как запустить скрипт bash при аутентификации ssh?
  • Перезапустить брандмауэр из файла bash
  • Зеркалирование stackexchange, включая внешние изображения
  • Как я могу манипулировать подкаталогами в оболочке?
  • Linux и Unix - лучшая ОС в мире.