Shell脚本中的嵌入式Perl - 将值返回到Parent

时间:2013-06-11 13:07:57

标签: perl bash shell exit

出于某种原因,我需要在Bash中运行perl脚本。但是在perl中有一个计数器,我想在shell脚本(parent)中使用它。但由于某种原因,我无法取得它。

有人可以帮帮我吗? (我唯一的选择是将perl返回代码写入文件,然后在shell脚本(父)中读取文件以获取值。)

#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
perl - $cnt <<'EOF'
    #!/usr/bin/perl -w
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print "In Perl (cnt: $cnt)\n";
    exit $cnt;
EOF
echo "In Bash (cnt: $cnt)"

输出:

$ ./testPerl
在Bash(cnt:1)中 在Perl(cnt:100)中 在Bash(cnt:1)中

3 个答案:

答案 0 :(得分:3)

#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
cnt=`perl -e '
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print $cnt;
    exit' $cnt`
echo "In Bash (cnt: $cnt)"

答案 1 :(得分:1)

@askovpen在我之前回答了这个问题。我想证明你仍然可以使用heredoc:

#!/bin/sh
cnt=1
echo "before (cnt: $cnt)"
cnt=$(
perl -l - $cnt <<'EOF'
    $x = shift;
    $x++ while $x < 100;
    print $x;
EOF
)
echo "after (cnt: $cnt)"

我更改了perl的变量名,以明确该变量未在所有

共享

答案 2 :(得分:-1)

#!/bin/sh
cnt=1
echo "In Bash (cnt: $cnt)"
perl - $cnt <<'EOF'
    #!/usr/bin/perl -w
    my $cnt=shift;
    while ($cnt<100) {
        $cnt++;
    }
    print "In Perl (cnt: $cnt)\n";
    exit $cnt;
EOF
cnt=$?;
echo "In Bash (cnt: $cnt)"