【问题标题】:Embedded Perl script in Linux shell [duplicate]Linux shell中的嵌入式Perl脚本[重复]
【发布时间】:2015-05-19 20:47:05
【问题描述】:

我可以从 Unix shell 调用 Perl 脚本吗?例如,我的 bash 脚本格式如下:

#!/bin/sh
echo This is bash

i=12
echo $i

perl <<__HERE__
print "This is perl\n";
my \$i = $i;
print ++\$i . "\n";


echo This is bash again
echo $i

以上只是一个例子。

是否可以将变量从 bash 传递到脚本?希望我能正确正确地表达自己。我需要调用 Perl 脚本,该脚本将从 bash 脚本中获取值并使用它们,然后返回处理后的结果。

【问题讨论】:

  • 你忘了结束你的__HERE__
  • 为什么没有一个单独的 Perl 脚本?我只是好奇。
  • 我只是在探索选项......也许从 shell 调用脚本是个好主意:perl path/myscript.pl 是这样的可能吗?

标签: linux bash perl shell


【解决方案1】:

问题是美元符号需要转义。它使 Perl 脚本难看、容易出错。使用环境变量。

#!/bin/bash

export i=12
readarray results < <(perl <<-'__HERE__'
        my $i = $ENV{'i'};
        print "$i\n";
        $i += 1;
        print "$i\n";
        __HERE__
)
for r in "${results[@]}"; do echo $r; done

HERE 周围的引号可防止 bash 进行变量替换。 “-”允许此处的文档缩进它的制表符。

虽然这是对 Bash 更精细点的一个很好的练习,但为什么不只用 Perl 或 Bash 编写代码呢? Bash 可以做正则表达式、数组等。而 Perl 可以做所有 Bash 可以做的事情。

【讨论】:

  • 好吧,这很好,但有一个问题:我怎样才能返回值?我的脚本做了一些事情,然后用处理后的数据返回散列。
【解决方案2】:

这是一种在 Shell 脚本中调用 Perl 脚本的方法。确保 Perl 脚本是可执行的,并且第一行是 #!/usr/bin/perl

#!/bin/sh

/path/to/perlscript/scriptName.pl arg1 arg2

arg1 arg2 .. 是您需要传递的参数。

您可以设置 PATH 并像这样调用脚本:

#!/bin/sh

PATH=/path/to/perlscript/

${PATH}test.pl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2021-08-21
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多