bash的HereDoc中的Perl脚本
发布时间:2020-12-15 18:53:41 所属栏目:安全 来源:网络整理
导读:有可能在bash脚本中写一个perl脚本作为heredoc吗? 这不工作(仅适用于示例) #/bin/bashperl EOFwhile() { chomp; print "xxx: $_n";}EOF 这里有一些很好的方式如何将perl脚本嵌入到bash脚本中?想要从bash脚本运行perl脚本,不想把它放到外部文件中. 这里的
有可能在bash脚本中写一个perl脚本作为heredoc吗?
这不工作(仅适用于示例) #/bin/bash perl <<EOF while(<>) { chomp; print "xxx: $_n"; } EOF 这里有一些很好的方式如何将perl脚本嵌入到bash脚本中?想要从bash脚本运行perl脚本,不想把它放到外部文件中.
这里的问题是脚本被传递到stdin上的perl,所以尝试从脚本处理stdin不起作用.
字符串文字 perl -e ' while(<>) { chomp; print "xxx: $_n"; } ' 使用字符串文字是最直接的方式来编写,尽管如果Perl脚本中包含单引号本身并不理想. 2.使用perl -e #/bin/bash script=$(cat <<'EOF' while(<>) { chomp; print "xxx: $_n"; } EOF ) perl -e "$script" 如果您使用perl -e将脚本传递给perl,那么您将不会有stdin问题,您可以在脚本中使用任何您喜欢的字符.虽然这样做有点迂回. Heredocs在stdin上输入输入,我们需要字符串.该怎么办?哦,我知道!这要求$(猫< HEREDOC). 确保使用<'EOF',而不是仅使用< EOF来保持bash在heredoc内进行变量插值. 你也可以写这个没有$脚本变量,虽然它现在变得非常毛茸茸! perl -e "$(cat <<'EOF' while(<>) { chomp; print "xxx: $_n"; } EOF )" 过程替代 perl <(cat <<'EOF' while(<>) { chomp; print "xxx: $_n"; } EOF ) 按照#2的方式,您可以使用名为进程替换的bash功能,该功能可以让您编写<(cmd)来代替文件名.如果你使用这个,你不需要-e,因为你现在传递perl一个文件名,而不是一个字符串. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |