BASH:ls$PATH中的前5个,不显示错误
我从大学的bash开始,任何人都知道如何解决这个问题: 显示$PATH变量中每个目录的前5个文件,如果某个目录不存在,则不显示错误消息 解决方案可以是:BASH:ls$PATH中的前5个,不显示错误,bash,Bash,我从大学的bash开始,任何人都知道如何解决这个问题: 显示$PATH变量中每个目录的前5个文件,如果某个目录不存在,则不显示错误消息 解决方案可以是: ls-a``echo$PATH|sed“s/://g``2>/dev/null 它可以工作,可能还有其他选项,但我不知道如何将每个显示块的结果限制为5个?请尝试以下代码: printf '%s\n' ${PATH//:/ } | while read dir; do /bin/ls 2>/dev/null -1 "
ls-a``echo$PATH|sed“s/://g``2>/dev/null
它可以工作,可能还有其他选项,但我不知道如何将每个显示块的结果限制为5个?请尝试以下代码:
printf '%s\n' ${PATH//:/ } |
while read dir; do
/bin/ls 2>/dev/null -1 "$dir" |
head -5
done
部件使用${PATH/://*/}
正在打印新行上用空格分隔的任何单词printf“%s\n”
列出换行符上的文件。我使用完整路径覆盖别名/bin/ls-1
打印前5行head-5
perl
的解决方案:
#!/usr/bin/perl -lw
use strict;
use Env qw/PATH/;
my $hash = {};
my @paths = split ":", $PATH;
push @{ $hash->{"$_"} }, glob "${_}/*" for @paths;
foreach my $key (keys(%$hash)) {
next unless $hash->{$key}->[0];
print "$key";
for (my $i = 0; $i < 5; $i++) {
my $line = $hash->{$key}->[$i];
print " $line" if $line;
}
print "\n";
}
不解释也不会帮你太多忙(…)
这应该可以,看看:
#!/bin/bash
IFS=':' read -a array <<<"$PATH"
for i in "${array[@]}"; do
ls -al $i 2>/dev/null | head -5
done
#/bin/bash
IFS=':'读取数组名称的前五个?尺寸?原始目录位置?时间?我假设您想要点文件(ls-a
),但是您想要“.”和“…”?没有提到这一点,因此它可以默认为名称,其想法是只列出5个结果限制的结果,而不需要代码>在IFS
&无需()
:生成子shell的。所以:{IFS=:对于$PATH中的a;请在意外标记“do”附近查找“$a”-键入f | head-n 5;done;}2>/dev/null
@sputnick语法错误。还有,你为什么这么说?这不是一个高尔夫球,因为{}
,代码>是最后需要的。我这么说是因为在这种情况下使用子shell会导致不必要的开销。@sputnick我在使用您的变量时会得到错误。你试过了吗?(顺便问一下,如果根本不需要子shell,为什么要使用{}
)
(IFS=:; for a in $PATH; do find "$a" -type f | head -n 5; done) 2> /dev/null
#!/bin/bash
IFS=':' read -a array <<<"$PATH"
for i in "${array[@]}"; do
ls -al $i 2>/dev/null | head -5
done