2

「readlink -f」が実行する個々のシンボリックリンク解決のトレースを提供するバージョンが欲しいです。何かのようなもの:

$ linktrace /usr/lib64/sendmail
/usr/lib64 -> lib
/usr/lib/sendmail -> ../sbin/sendmail
/usr/sbin/sendmail
$ 

過去に Linux でこのユーティリティを使用したことは知っていますが、当時、「このツールの名前はまったく直感的ではなく、忘れてしまうだろう」と考えたことも覚えています。さて、その日がやってきました。

4

3 に答える 3

1

誰も勝てません。正解は「なめい」です。

于 2013-02-20T02:07:18.537 に答える
0

この Serverfault の回答(Bash の場合) が役立つ場合があります (ただし、すべてのエッジ ケースを処理するとは主張していません)。

于 2011-01-07T22:46:12.980 に答える
0

Code golf anyone?

#!/usr/bin/perl

use File::Spec;
my $g;
my $f = shift;
while (1) {
    print $f;
    $g = readlink($f);
    last unless defined $g;
    printf " -> %s\n", $g;
    $f =~ s,/[^/]*$,,;
    $f = File::Spec->rel2abs($g, $f);
}
print "\n";

Ok, how about this:

#!/usr/bin/perl

use File::Spec;

sub r {
    my ($p, $s) = @_;
    my $l = readlink $p;
    if ($l) {
        printf "%s -> %s\n", $p, $l;
        $p =~ s,/[^/]*$,,;
        r("",File::Spec->rel2abs($l,$p) . $s)
    } else {
        $s =~ s!^(/?[^/]+)(.*)! r($p.$1, $2) !e;
    }
}
r("",shift);

The output is not quite as described but it's understandable. And dig that craaazy recursive executable regexp substitution!

于 2011-01-07T22:49:19.533 に答える