in reply to Re^2: 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?

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'); } }

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

    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