in reply to Re: How best test that a directory is a mount point of a mounted filesystem?
in thread How best test that a directory is a mount point of a mounted filesystem?

The OS will most likely be Linux but this could get run a some legacy Solaris systems.
  • Comment on Re^2: How best test that a directory is a mount point of a mounted filesystem?

Replies are listed 'Best First'.
Re^3: How best test that a directory is a mount point of a mounted filesystem?
by jh- (Scribe) on Jan 27, 2009 at 17:51 UTC

    IIRC solaris uses /etc/mnttab, so you could do something like this:

    my ($mtab, $mounted); $mounted = 0; if($^O eq 'linux') { $mtab = '/etc/mnttab'; } else { $mtab = '/etc/mtab'; } open my $mounts, "<$mtab" or die($!); while(<$mounts>) { if($_ =~ /\S+ (\S+) .*/) { $mounted = 1 if($1 eq '/opt/mymountpoint'); } }

      Sorry, I messed up with the file names. Obviously it needs to be the other way around ;)

      if($^O eq 'linux') { $mtab = '/etc/mtab'; } else { $mtab = '/etc/mnttab'; }

      You could (and probably should) specify solaris for the else-clause, but I'm not sure what $^O yields on Solaris.. Probably just 'solaris'.

      Also don't forget to close the file after all that:

      close $mounts;
        you could (and probably should) specify solaris for the else-clause, but I'm not sure what $^O yields on Solaris.. Probably just 'solaris'.

        This is somewhat off topic... it all depends on what you are trying to do but note there is a difference in output between $^0, uname, and $Config{archname}. Below is some output from different OSes for comparison. The following code was used:
        #!/usr/bin/perl use strict; use Config; my $os_OS = $^O; my $config = $Config{'archname'}; my @uname = `uname -a`; chomp( my $os = shift @uname ); $os =~ s/^(\w+)\s.*/$1/; print "Uname -> $os\n"; print "\$^O -> $os_OS\n"; print "Config -> $config\n";
        Linux
        Uname -> Linux
        $^O -> linux
        Config -> x86_64-linux-gnu-thread-multi

        Solaris 5.9 and 5.10
        Uname -> SunOS
        $^O -> solaris
        Config -> sun4-solaris-64int

        AIX 6.1
        Uname -> AIX
        $^O -> aix
        Config -> aix-thread-multi

        Also be aware that $^O returns the architecture the perl binary was built on not the OS you are running on. That can be misleading, for example:

        OS400 PASE
        Uname -> OS400
        $^O -> aix
        Config -> aix

        See the discussion OS400 PASE - architecture? for details.

        regexes