使用Perl上的终端上市目录

  • 本文关键字:Perl 使用 终端 linux perl
  • 更新时间 :
  • 英文 :


我正在尝试编写一个perl一个衬里,以列出目录的内容,例如" ls -l" unix命令,但是我只想输出目录而不是文件

我设法使用perl脚本进行了操作,但我想尝试使用

之类的管道来查看它是否可以将其简化为单行
ls -l | grep "something"

ls -l | perl -...

到目前为止,我这样做的方式是这个

#!/usr/bin/perl
open(LS_D, "ls -l |");
while(<LS_D>) {
  print if /^d.*/; #print line if line starts with d
}

您还可以告诉我为什么这与" LS -L |"中的管道一起使用。但不是" LS -L"?

谢谢

目录的长列表可以直接使用

获得
ls -ld */

无需过滤输出。

至于|,这就是您告诉打开过程并替换其STDINSTDOUT

的方式

对于三个或多个参数,如果模式为 |-,则将文件名解释为要管道输出的命令,如果模式为 -|,则将文件名解释为将输出输出输出的命令。在两种词汇(和一个argument(表单中,应该用命令替换dash( -(。有关更多示例,请参见perlipc中的IPC的open((。

没有|,因此使用open(LS_D, "ls -l"),您正在尝试打开 file ,名称'ls -l'

建议使用其词汇fileHandle进行的三项 open

open my $read_fh, '-|', 'ls', '-l';

提供了带有参数的命令作为列表。

最后,您可以使用单线仪来完成您在perl脚本中所拥有的操作,例如

perl -we'print grep { /^d/ } `ls -l`'

,但是,如上所示,您可以在命令行上直接使用ls获得。


我应该添加

  • 始终在程序顶部具有use warnings;use strict;

  • 始终检查open的呼叫,您会知道并查看故障的原因

    open my $fh ...  or die "Can't open ... : $!";
    

    请参阅 $!

  • 的perlvar中的错误变量

最新更新