Ps. Veiled in the original question was the implication that ksh was available on all that organisation's servers.
There are several portability issues between ksh88 and ksh93, and much more with pdksh, which unfortunately some organisations standardize with.
I write and maintain a lot of shell scripts. I do my best to stick to POSIX constructions. When none is convenient enough, I try to use extensions available in both ksh and bash and I explicitly states the shell to use in the shebang (#!/bin/ksh or #!/bin/bash but never #!/bin/sh).
These 2 Users Gave Thanks to jlliagre For This Post:
I too use the Shebang line to make a positive statement about the language of the Script. As jlliagre correctly notes, using #!/bin/sh is ambiguous and definitely to be avoided on Sun Solaris systems (where it invokes the old Bourne Shell). On HP-UX it invokes the Posix Shell and on most modern Linux / MACOS systems it invokes bash. Good start.
The Posix folks really need to come up with a name for their "standard" Shell to make it easy for the rest of the world to adopt the standard. Currently it is a joke. The sheer number of posts on this site which propose script which will not run on the poster's Shell is evidence of what might well be a good standard gone wrong.
Last edited by methyl; 05-24-2012 at 05:58 PM..
Reason: grammar
On every modern Unix system /bin/sh points to either a POSIX compliant shell, or an almost compliant shell (bash --posix) on most Linux systems except Ubuntu, which uses a compliant shell (dash). So POSIX code should run with #!/bin/sh on the compliant systems and in practice on the Linux systems that use bash --posix as well. AFAIK of the modern Unixen only Solaris upto version 10 uses the Bourne shell for /bin/sh. On Solaris 11 this is now ksh93 which is POSIX compliant...
Last edited by Scrutinizer; 05-24-2012 at 09:45 PM..
These 2 Users Gave Thanks to Scrutinizer For This Post:
How we get to know the ambiguous shebang (#!/bin/sh) invokes which shell in different OS?
Hi,
Could anyone please explain, how we get to know the ambiguous shebang (#!/bin/sh) invokes which shell in different OS like ubuntu, hp-ux or Solaris?
Thanks!
Kind regards,
It should not matter if you write your script in strict POSIX. All of these shells should then execute your script correctly. Only on Solaris <=10 would you need to use a different location (#!/usr/xpg4/bin/sh).
If you do not use the shebang, then the script will be executed by whatever the calling shell happens to be at the time of execution..
If more functionality than POSIX is required, for example arrays, then one should not use /bin/sh (even if it works), but rather put /bin/bash or /bin/ksh in the shebang or wherever that particular shell happens to reside.
Last edited by Scrutinizer; 05-25-2012 at 04:42 PM..
Despite popular belief, the shebang is (currently) to be avoided if you want to write portable POSIX compliant shell scripts. The standard states:
If the first line of a file of shell commands starts with the characters "#!" , the results are unspecified.
You just have to make the script executable and call it from a POSIX environment, i.e. one which has its PATH set to have the POSIX commands first and with some other cleanup, like that one:
Unfortunately, this isn't sufficient as you might need extra specific prerequisites like setting a variable telling what version of the standard to follow under HP-UX:
or
It is unfortunate people involved in defining this standard hasn't yet managed to provide a simple and reliable way to define a POSIX script.
I have read a suggestion like that one in the working group discussions:
Dear Friends,
Please help me on this
my script name is send.csh
In this i have written the statement like this
set args = ( city state country price )
I want to pass this array to another c shell called receiver.csh. and i want to use it in this c shell
or
how to pass to... (2 Replies)
basically i'm tired of hitting the left arrow a few dozen times when correcting a mistake or modifying a history command
i'd like to use vim style key shortcuts while on the command line so that a 55 moves the cursor 55 places to the left...
and i want all the other vi goodies, search of... (3 Replies)
Hello gurus,
I have three korn shell script 3.1, 3.2, 3.3. I would like to call three shell script in one shell script.
i m looking for something like this
call 3.1;
If 3.1 = "complete" then
call 3.2;
if 3.2 = ''COMPlete" then
call 3.3;
else
exit
The... (1 Reply)
Hi,
I am new to unix and using linux 7.2. I would like to create a script that would make it easyer for me to run my java programms. At the moment I have to type java myJavaprogram
I am trying to write a script that will allow me to type something like this "myscript myJavaprogram" or maybe... (4 Replies)
Hi,
I am using HP-UNIX.
I have a requirement as below
I have to change env twice like:
cadenv <env>
cadenv <env>
ccm start -d /dbpath
ccm tar -xvf *.tar
ccm rcv ....
mv *.tar BACKUP
but after I do the first cadenv <env> , I am unable to execute any of the later commands .
... (6 Replies)
i have a small problem getting a batxh shell script to run in shell
this is the code
the problem seems to be centered around the ffmpeg command, something maybe to do with the ' ' wrapping around the vhook part command
this is a strange problem , if i take the ffmpeg command and... (1 Reply)
Hi
I tried with bash --login option. but the output is
siva:~$ bash --login
siva:~$
is there any way to make the shell ask for user id and password ( and login as different user instead of using sudo / su )
Thx in advance
Siva (3 Replies)
Hi ,
I am having one situation in which I need to run some simple unix commands after doing "chroot" command in a shell script. Which in turn creates a new shell.
So scenario is that
- I need to have one shell script which is ran as a part of crontab
- in this shell script I need to do a... (2 Replies)