【问题标题】:How can I pass in text rather than a file as a variable如何将文本而不是文件作为变量传递
【发布时间】:2015-12-31 06:21:58
【问题描述】:

我想将文本作为变量而不是文件传递。 我不确定如何仅通过一个示例来很好地解释这一点。

我有一个 perl 脚本,用法如下 printme.pl [file] 我想在不传递文件而只传递文本的情况下运行。

echo print_me | perl printme.pl

而不是做

perl printme.pl textfile.txt

我正在尝试运行一个将文本文件作为变量并使用 echo 输出的 perl 脚本。

【问题讨论】:

    标签: perl shell command-line terminal


    【解决方案1】:

    bash(在其他 shell 中)有一个名为 process substitution 的功能。在此功能中,您可以添加一些输出到 stdout 的 shell 代码,并让 shell 将其视为文件。

    在你的情况下,你会写:

    perl printme.pl <(echo "hello world")
    

    Perl 将在 $ARGV[0] 中接收一个类似于 /dev/fd/63 的文件名,它可以从中读取“hello world\n”行

    【讨论】:

    • 当我这样做时,当我尝试在我的脚本中打开一个日志文件时出现错误。 open($logfile,"&gt;","$cruftDirectory/indent.log") 脚本死了。
    • 什么是$cruftDirectory?如果是 $ARGV[0] 的目录名,则必须选择不同的目录。
    • 只是当前目录。
    • 捕获错误并显示它:open $logfile, '&gt;', "$cruftDirectory/indent.log" or die "can't open: $!";
    猜你喜欢
    • 2022-01-03
    • 2021-11-25
    • 1970-01-01
    • 2022-01-15
    • 2016-06-07
    • 2020-08-30
    • 2020-10-31
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多