#! /usr/local/bin/perl -w # -*- mode:perl -*- # $Id: readlink.pl,v 1.20 1998/08/26 00:56:57 user Exp $ # Copyright (c) 2002 auto92089@hushmail.com use strict; use integer; # REMOVE IF YOU USE FLOATING POINT! use File::Basename; $main::progname = basename $0; use Getopt::Long; $main::quiet = 0; $main::abs = 0; $main::chase = 0; $main::track = 0; $main::sep = ' '; GetOptions('quiet', \$main::quiet, 'abs', \$main::abs, 'chase', \$main::chase, 'track', \$main::track, 'sep=s', \$main::sep) or die "Usage: $main::progname [--quiet] [--abs | [--sep string] [--chase | --track]] [files...]\n"; $main::chase = 1 if $main::track; $main::abs = 1 if $main::chase; if ($main::abs) { use File::PathConvert; } $main::exitcode = 0; my $linkee; ARGUMENT: foreach (@ARGV ? @ARGV : map { scalar(chomp $_, $_) } ) { goto START_PRINTING if $main::track; if ($linkee = readlink $_) { $_ = $linkee; $linkee = ""; goto START_PRINTING unless $main::abs; while (1) { $_ = File::PathConvert::rel2abs($_, $linkee); $linkee = dirname $_; START_PRINTING: print; unless ($main::chase and $_ = readlink) { print "\n"; next ARGUMENT; } print $main::sep; } } else { warn "$main::progname: error reading link $_: $!\n" unless $main::quiet; $main::exitcode++; } } exit $main::exitcode;