2012-08-04 103 views
-6

我正在尝试编写一个内部调用“ls”并将输出保存到文件的Perl脚本。在页面上显示屏幕上的文件,允许用户点击一个键进入下一页?内部调用Linux命令并将输出保存到文件的Perl脚本?

任何想法? 感谢

到目前为止,我有这样的:

#!/usr/bin/perl 
$command = system("ls /bin/usr/account\ users/"); 
+0

不好结构的问题。 -1 – miksiii 2015-01-11 15:23:17

回答

2

这听起来像你正在尝试重写ls | more。你真的需要这样做吗?

下面的程序打开文件temp.txt进行书写。然后它使用qx(相当于反引号)从命令获取输出并将其写入文件。

然后重新打开同一个文件进行读取,每次发送20行文件到STDOUT

要允许来自键盘的字符IO,读取模式设置为3,并调用ReadKey来获取下一个按键。这些调用需要在程序顶部的use语句中指定Term::ReadKey模块。这是一个核心模块,所以不应该需要安装

use strict; 
use warnings; 

use Term::ReadKey; 

open my $fh, '>', 'temp.txt' or die $!; 
print $fh qx(ls /bin/usr/account/users/); 

open $fh, '<', 'temp.txt' or die $!; 

ReadMode(3); 

my $n = 20; 
while (<$fh>) { 

    print; 

    if (--$n == 0) { 
    print "-- More --"; 
    ReadKey(0); 
    $n += 20; 
    } 
} 
+0

现在记住'less'就是'more' – pulven 2012-08-05 07:51:02

3

保存命令的输出$command希望

my $command = `ps aux`; 

或者,也许更好,

my @command = `ps aux`; 

后者会将命令输出的每一行存储为t的单独元素他列出。之后,您可以随意使用$command@command - 显示其内容,将其内容写入文件,无论您是否喜欢显示和写入。

要写入文件,

my $filename = "MY_FILENAME"; 
# ... 
open FILE, '>>', $filename; 
print FILE @command; 
close FILE; 

可以使用'>'而不是'>>'如果你喜欢覆盖该文件,而不是追加到它。您可以使用任何词语代替FILE,尽管在任何情况下全部使用这样的词是常规的。

+0

感谢您的帮助。尝试将命令ps aux的结果输出到文件时仍有问题。我试过$ command = system(“ps aux”),'>:crlf',$ file;打开FILE,'>>',$ file;关闭FILE; – 2012-08-04 13:52:11

0

你可以考虑使用system用以下命令:

ps aux >/tmp/myfile 

,或者,如果你想在Perl来处理它,像:

open (INSTREAM, "ps aux |"); 

,然后你可以阅读LILE任何其他“文件”:

while (<INSTREAM>) { ... } 
+0

谢谢。使用系统工程。 – 2012-08-04 13:49:06

相关问题