有可能在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一个文件名,而不是一个字符串.