使用eval在shell脚本中执行perl代码
我遇到了下面的例子。我试着用谷歌搜索,但找不到太多,所以我把这个问题贴在这里使用eval在shell脚本中执行perl代码,perl,unix,Perl,Unix,我遇到了下面的例子。我试着用谷歌搜索,但找不到太多,所以我把这个问题贴在这里 这样执行perl脚本有什么好处 一旦执行完perl代码,我们如何使shell脚本像“普通”shell脚本一样工作 代码如下: #!/bin/ksh #! -*- perl -*- eval 'exec $PERLLOCATION/bin/perl -x $0 ${1+"$@"} ;' if 0; print "hello world\n"; # how can I make it behave like a "nor
#!/bin/ksh
#! -*- perl -*-
eval 'exec $PERLLOCATION/bin/perl -x $0 ${1+"$@"} ;'
if 0;
print "hello world\n";
# how can I make it behave like a "normal" shell script from this point onwards? What needs to be done?
# echo "hello world" ### this results in error
文档中描述了这个习惯用法。
-x
开关扫描整个文件,并忽略以#开头的第一行之前出现的任何内容
还包含单词perl
。
这意味着您的系统将使用Perl解释器运行脚本,无论您是使用Perl
还是使用shell命令(sh/bash/ksh/
等)调用脚本
就是
及
两者都将使用perl
运行脚本
为了解决第二个问题,这个习惯用法与在同一个文件中组合shell脚本和Perl脚本几乎没有任何关系。有几种不同的方法来解决这个问题,但最可读的方法可能是用shell脚本编写,但使用shell的herdoc表示法来调用perl代码
#!/bin/bash
# this is a bash script, but there is some Perl in here too
echo this line is printed from the shell
echo now let\'s run some Perl
perl <<EOF
# this is now perl script until we get to the EOF
print "This line is printed from Perl\n";
EOF
echo now this is from the shell script again
#/bin/bash
#这是一个bash脚本,但这里也有一些Perl
echo此行是从外壳打印的
echo现在让我们运行一些Perl
perl文档中描述了这个习惯用法。
-x
开关扫描整个文件,并忽略以#开头的第一行之前出现的任何内容
还包含单词perl
。
这意味着您的系统将使用Perl解释器运行脚本,无论您是使用Perl
还是使用shell命令(sh/bash/ksh/
等)调用脚本
就是
及
两者都将使用perl
运行脚本
为了解决第二个问题,这个习惯用法与在同一个文件中组合shell脚本和Perl脚本几乎没有任何关系。有几种不同的方法来解决这个问题,但最可读的方法可能是用shell脚本编写,但使用shell的herdoc表示法来调用perl代码
#!/bin/bash
# this is a bash script, but there is some Perl in here too
echo this line is printed from the shell
echo now let\'s run some Perl
perl <<EOF
# this is now perl script until we get to the EOF
print "This line is printed from Perl\n";
EOF
echo now this is from the shell script again
#/bin/bash
#这是一个bash脚本,但这里也有一些Perl
echo此行是从外壳打印的
echo现在让我们运行一些Perl
perl1.如果以常规方式启动perl脚本:
#!/usr/bin/perl
print "hello world\n";
#代码>行仅在Perl解释器实际安装在/usr/bin
下时才起作用。您展示的perl/ksh双语脚本是一个棘手的难题,即使在其他地方安装了perl,也无法使脚本正常工作。有关详细信息
2.你不能。当shell进程遇到exec
命令时,它终止并将控制权移交给perl。(从技术上讲,它是。)之后运行更多shell命令的唯一方法是启动一个新的shell。1。如果您以常规方式启动Perl脚本:
#!/usr/bin/perl
print "hello world\n";
#代码>行仅在Perl解释器实际安装在/usr/bin
下时才起作用。您展示的perl/ksh双语脚本是一个棘手的难题,即使在其他地方安装了perl,也无法使脚本正常工作。有关详细信息
2.你不能。当shell进程遇到exec
命令时,它终止并将控制权移交给perl。(从技术上讲,它是。)之后运行更多shell命令的唯一方法是启动一个新的shell。这比已经发布的要简单得多
#!$PERLLOCATION/bin/perl
不工作,因为shebang(#!
)行由内核(而不是shell)解释,内核不执行变量插值
代码调用ksh
来扩展环境变量并启动指定的Perl安装。这比已经发布的要简单得多
#!$PERLLOCATION/bin/perl
不工作,因为shebang(#!
)行由内核(而不是shell)解释,内核不执行变量插值
代码调用ksh
来扩展环境变量并启动指定的Perl安装。值得指出的是,这种“习惯用法”在现代系统上几乎没有必要;它是作为一种解决方案来实现的,适用于shebang线不能像您希望的那样工作的系统。@tripleee,需要指出的是OP实际上并没有使用这个习惯用法,拥有一个现代系统在这里也没有帮助。需要指出的是,这个“习惯用法”在现代系统上几乎没有必要;它是作为一种解决方案来实现的,适用于shebang线不能像您希望的那样工作的系统。@tripleee,需要指出的是OP实际上没有使用这个习惯用法,拥有一个现代化的系统在这里是没有帮助的。请参阅,以了解各种方法的详细说明。请参阅,了解各种方法的详细说明。