http://qs1969.pair.com?node_id=557069


in reply to find the shell inside a perl script

From the command line if I execute echo $0, I will be able to find the shell name. How can I find this inside a script whithout using `echo $0`. I think there is no use of this command inside a perl script.

You mean there's no point trying to use `echo $0` from inside a perl script, because that will never give you the information you need (as indicated by an earlier reply).

You could get the return value from the getppid function call -- this would be the pid of the shell that is running the perl script -- and then you would have to look up that pid in the system's process table to figure out the command name associated with it. That would require either a special module for looking up the process table on your particular OS, or else running "ps" in backticks to get the command name. Something like this seems to work for me (on bsd-based macosx):

my $ppid = getppid; my $ppdescrip = `ps -p $ppid`; my ( $shell_name ) = ( $ppdescrip =~ /(\S+)\s*$/ ); # shell name is last word in the output of "ps -p pid"
I expect the ps command line, and/or where to find the shell name in the ps output, might vary slightly depending on your particular OS (and your script knows what OS you have: look for the "$^O" variable in perlvar).

And of course, the only time this might fail is when the perl script has been invoked by something other than a shell. But I assume that will never be relevant in your case.

(update: I'm still curious about what sorts of things you could possibly be doing inside the perl script that need to depend on which flavor of shell was used to run the script.)