1

如何调用 shell 脚本的子程序并将某些参数传递给它?像下面的东西?

#!/usr/bin/perl
### need something like this
source file.sh
routine;            # <-- this is supposed to be part of file.sh which is called 
                    # from perl script and some parameter are passed to it
4

2 回答 2

1

不,它们是两种不同的语言。您所能做的就是从 Perl 调用一个 shell 脚本作为子进程,例如使用system()qx().

用一种语言编写程序,Perl 或 shell,不要试图混合使用它们。

好的,可以从 shell 中导出一个函数,然后在 Perl 中解析和执行它,但这需要大量工作,不安全,而且通常不值得付出努力。

于 2013-10-29T13:07:29.480 回答
0

解决这个问题的一个技巧是将 file.sh 中的例程内容隔离到 subfile.sh 中 - 然后您可以在 Perl 中执行此操作:

@cmdargs=('subfile.sh', $arg1, "arg2");
system(@cmdargs);

第一个列表元素是命令,第二个是作为参数传递给 subfile.sh 的 Perl 变量的值;第三个是作为参数传递给 subfile.sh 的文字。

避免在 subfile.sh 和 file.sh 中的例程内容副本之间的维护问题,方法是在 file.sh 中为 subfile.sh 编写一个包装器,并使用适当的参数简单地调用它,就像任何其他 shell 命令一样,无论您在哪里调用例程在文件.sh 中。

我认为那会奏效。

于 2013-10-29T13:36:57.830 回答