您好我有一个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.
答案 0 :(得分:12)
您有几个选择。
您可以使用-e
/ -E
将代码传递给Perl。
...
perl -e'
print "Hello, World!\n";
'
...
Con:逃避可能是一种痛苦。
您可以通过STDIN传递代码。
...
perl <<'END_OF_PERL'
print "Hello, World!\n";
END_OF_PERL
...
Con:脚本无法使用STDIN。
您可以创建虚拟文件。
...
perl <(
cat <<'END_OF_PERL'
print "Hello, World!\n";
END_OF_PERL
)
...
Con:Wordy。
您可以利用perl
-x
选项。
...
perl -x -- "$0"
...
exit
#!perl
print "Hello, World!\n";
骗局:只能有一个片段。
$0
是正在执行的shell脚本的路径。它作为要运行的程序传递给perl
。 -x
告诉Perl开始在#!perl
行而不是第一行执行。
参考: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来避免引用问题,但我不确定。