My RHEL 5 box has 2 perl versions on it, say X and Y. The OS comes with /usr/bin/perl and /usr/bin/perlX, which are the same inode, and we've installed /path/to/perlY in /usr/local. So we can assume /usr/bin/perlX is guaranteed to exist.
I want to replace /usr/bin/perl with a script that says "exec /path/to/perlY if it's executable, and exec /usr/bin/perlX otherwise". This is to help reduce impact in the case that perlY is unavailable due to NFS problems. (The /path/to/perlY is ahead of /usr/bin in the shell $PATH.)
The idea is that "/usr/bin/perl ABC", and also scripts with "#!/usr/bin/perl" shebang lines, should use the desired perl. First I made this be /usr/bin/perl:
This worked for e.g. "/usr/bin/perl -V", but for perl scripts beginning with "#!/usr/bin/perl", I got complaints about the syntax of the perl scripts, because bash was trying to interpret them.#!/bin/bash if [ -x /path/to/perlY ]; then exec /path/to/perlY "$@" else exec /usr/bin/perlX "$@"
After Web searching and reading, my next try was to make /usr/bin/perl be this:
#!/usr/bin/perlX exec '/path/to/perlY', @ARGV if ( -x "/path/to/perlY" ); exec '/usr/bin/perlX', @ARGV;
This isn't right, either. I tried some code from the 'perlrun' doc, but no luck. I must be missing something small (not much of a perl coder). It seems this must have been done already, but what I find searching online is things that are similar to my case, but not the same. Any ideas? Thanks!
(We install lots of third-party code, and so do our users, and it's not feasible for us to require that all "#!/usr/bin/perl" scripts on our system either have a different shebang line, or some other line inserted as the scripts' second line.)
In reply to wrapper script to conditionally exec different perls? by stackspace
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |