簡體   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