繁体   English   中英

从bash到perl脚本的STDIN

[英]STDIN from bash to perl script

我有一个perl脚本(myscript.pl)

use strict;
use IO::Handle;

open OUTPUT, '>', "output.txt" or die $!;

STDOUT->fdopen( \*OUTPUT, 'w' ) or die $!;

while (<STDIN>){
print $_;
}

我可以将我在命令行上写的内容粘贴到output.txt中

我有一个bash脚本:

cat >in.$$ 

cat in.$$> /tmp/msg 

我可以将$。$中的内容粘贴到/ tmp / msg中

我需要使用来自bash脚本的stdin运行perl脚本。

有可能吗?

我试过了,尽管我知道那太傻了

cat in.$$> ./myscript.pl
in.$$> ./myscript.pl
in.$$> perl myscript.pl

要将文件的内容指定为bash命令的标准输入,请使用<

./myscript.pl < in.$$

要将一个命令的输出用作另一命令的输入,请使用“ |” (“管道”字符,就像您通过管道将位从一个进程发送到另一个进程一样)

cat in.$$ | ./myscript.pl
echo foo | ./myscript.pl

在您的Perl脚本中,使用菱形运算符 (也称为空文件句柄 ):

空文件句柄<>是特殊的:它可用于模拟sedawk以及其他任何使用文件名列表的Unix过滤器程序的行为,对所有文件名的每一行都执行相同的操作。 <>输入来自标准输入,或来自命令行上列出的每个文件。 它是这样工作的:第一次评估<> ,将检查@ARGV数组,如果它为空,则将$ARGV[0]设置为“-”,当打开时将为您提供标准输入。 然后,将@ARGV数组作为文件名列表进行处理。

这是一个例子:

#! /usr/bin/perl
# cat command emulator

while ( my $line = <> ) {
    chomp $line;
    say $line;
}

<>将获取命令行中列出的每个文件,依次打开它们,然后读取每一行, 从STDIN中拉入各行。

您也可以这样做:

while ( my $line = <STDIN> ) {
    chomp $line;
    say $line;
}

它将从STDIN读取行,但不会从命令行读取文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM