From: Daniel Berger Date: 2007-03-10T06:00:12+09:00 Subject: Re: Getting to the last file in a chain of symlinks On Mar 9, 12:44 pm, "AdSR" wrote: > On 9 Mar, 20:10, "Daniel Berger" wrote: > > > > > Hi all, > > > Here's a little code snippet I thought I'd share. It follows a chain > > of symlinks until you get down to the "real" file. Anyone got a better > > approach? > > > # On Solaris 10, Sunblade 150 > > # > > # /dev/fd0 -> fd0c > > # /dev/fd0c -> diskette0 > > # /dev/diskett0 -> ../devices/pci@1f,0/isa@7/dma@0,0/floppy@0,3f0:c > > # > > > file = '/dev/fd0' > > > while true > > Dir.chdir(File.dirname(file)) > > file = File.expand_path(File.readlink(file)) > > break unless File.symlink?(file) > > end > > > puts file # /devices/pci@1f,0/isa@7/dma@0,0/floppy@0,3f0:c > > > Regards, > > > Dan > > require 'pathname' > > puts Pathname.new('/dev/fd0').realpath Oh, dang, forgot about that. > I didn't check what would happen for cyclic dependencies. >ls -l lrwxrwxrwx 1 djberge other 5 Mar 9 12:25 link1 -> link2 lrwxrwxrwx 1 djberge other 5 Mar 9 12:23 link2 -> link1 -rw-r--r-- 1 djberge other 57 Mar 9 12:45 test.rb /usr/local/lib/ruby/1.8/pathname.rb:415:in `realpath_rec': Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS - /export/home/djberge/workspace/ruby_test/lib/test/link2 (Errno::ELOOP) from /usr/local/lib/ruby/1.8/pathname.rb:425:in `realpath_rec' from /usr/local/lib/ruby/1.8/pathname.rb:453:in `realpath' from test.rb:2 Dunno what happens on other platforms. Regards, Dan