如何将多个Python/Perl脚本集成到一个bash脚本中执行?

如何将多个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脚本,例如outputs1into script2.pl,然后outputs2intoscripts3.pl等?

有没有办法让我在不重写 perl/python 脚本的情况下做到这一点?

答案1

你写的 3 行来展示你想要什么有效的bash脚本:脚本只不过是 shell 依次执行的一系列命令。

您可能需要的唯一附加代码是清理script1.pl和生成的临时文件script2.pl。此外,您可能希望使用绝对路径来指定所在script{1,2,3}.pl位置。

#!/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

如预期的。

您无法真正在三个脚本之间设置管道,因为它们似乎是硬编码的以生成特定的输出文件。

答案2

假设输出文件是在本地创建的,即。在脚本所在目录中,您可以尝试在临时工作目录中运行脚本,您可以在执行脚本之前将脚本复制到该目录中,并且其他进程不会在该目录中创建文件。然后您将能够控制和操作由特定脚本创建的新文件。

/tmp您可以在活动用户目录中创建临时目录。在脚本末尾添加一条将拆除目录的命令。如果您希望将任何输出文件保存在其他地方,您可以在正确的时间将它们复制到正确的位置。

相关内容