http://qs321.pair.com?node_id=11112723

vinoth.ree has asked for the wisdom of the Perl Monks concerning the following question:

Hi All,

We are moving to solaris 11.3 to 11.4, So we are running all the scripts and make sure that no changes required in all the scripts.

There is a shell script which invokes another shell script, but it does not work, it says

/home/vinoth/funtions.sh[148]: .[232]: log[38]: compile.sh: cannot execute [Not owner]

But If I specify full path to compile.sh it works.

I have given execute permission for owner/group/others.

The owner of the script is adm user, execute as vinoth user. I am getting this error in solaris 11.3

Could somebody help me out, here.


All is well. I learn by answering your questions...

Replies are listed 'Best First'.
Re: OT: invoking shell script with relative path and absolute path
by hippo (Bishop) on Feb 10, 2020 at 09:07 UTC

    I guess there is another compile.sh which is in a directory earlier in your $PATH. Maybe try

    $ which compile.sh

    to confirm/refute.

      Just to make sure, did you insert the which compile.sh inside /home/vinoth/funtions.sh? Because path may be modified within function. Once you are there print the full path too (from within that function). If your path contains the dot early then ANY compile.sh script in script's current dir will be executed first. So within the function print PWD as well at the moment of attempted execution.

      Hi,

      which compile.shgives me correct path of compile.sh, that path is available in PATH variable.


      All is well. I learn by answering your questions...

        Without more data it's going to be hard to guess what's happening in that case. Here's an SSCCE which might help:

        cd /tmp cat > foo.sh <<EOT #!/bin/sh echo Relative path ./bar.sh echo Absolute path /tmp/bar.sh echo No path bar.sh EOT cat > bar.sh <<EOT #!/bin/sh echo bar running as \$0 EOT chmod 0755 foo.sh bar.sh sudo chown root bar.sh sudo cp -p bar.sh /usr/local/bin ./foo.sh

        Running this locally (not on Solaris!) gives this expected output:

        Relative path bar running as ./bar.sh Absolute path bar running as /tmp/bar.sh No path bar running as /usr/local/bin/bar.sh

        If you see the same, then you'll need to determine what's different about functions.sh and compile.sh compared to foo.sh and bar.sh. Don't forget to remove bar.sh from /usr/local/bin when you're done. Good luck.