从Unix Shell脚本运行Perl脚本

时间:2014-08-06 18:22:33

标签: perl shell unix

您好我有一个Unix Shell脚本调用Food.sh;我有一个Perl脚本调用Track.pl。有没有办法我可以将Track.pl的代码放入Food.sh代码并仍然有效? Track.pl需要一个arugement来标记文件夹的名称。

基本上它会像这样运行。

Unix Shell Script codes RUN

step into 

Perl Script codes RUN
Put in name of folder for Perl script
Rest of script runs

exit out.

2 个答案:

答案 0 :(得分:12)

您有几个选择。

  1. 您可以使用-e / -E将代码传递给Perl。

    ...
    perl -e'
    
       print "Hello, World!\n";
    
    '
    ...
    

    Con:逃避可能是一种痛苦。

  2. 您可以通过STDIN传递代码。

    ...
    perl <<'END_OF_PERL'
    
       print "Hello, World!\n";
    
    END_OF_PERL
    ...
    

    Con:脚本无法使用STDIN。

  3. 您可以创建虚拟文件。

    ...
    perl <(
    cat <<'END_OF_PERL'
    
       print "Hello, World!\n";
    
    END_OF_PERL
    )
    ...
    

    Con:Wordy。

  4. 您可以利用perl -x选项。

    ...
    perl -x -- "$0"
    ...
    exit
    
    #!perl
    print "Hello, World!\n";
    

    骗局:只能有一个片段。

    $0是正在执行的shell脚本的路径。它作为要运行的程序传递给perl-x告诉Perl开始在#!perl行而不是第一行执行。

  5. 参考:perlrun

答案 1 :(得分:1)

(我假设您的目标只是将所有代码放在一个文件中,以便您没有多个文件可供安装)

当然,有办法做到这一点,但这很麻烦。您可能需要考虑将shell脚本完全转换为Perl(或者将Perl脚本完全转换为shell)。

所以... 这样做的方法可能是:

#!/bin/sh

echo "shell"

perl -E '
say "perl with arg=$ARGV[0]"
' fred

echo "shell again"

当然,你必须在程序的Perl部分小心你的引号。

你也可以在Perl部分使用heredoc来避免引用问题,但我不确定。