加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读