On 2016-04-16 11:23 -0400, Gene Heskett wrote: > This bash script has lived in ~/bin for years, but the mention of dash as > a replacement for bash made me want to test it with dash by changing the > bang line to #!/bin/sh, which is of course (this is wheezy) a softlink > to /bin/dash.
FWIW, dash is not a replacement for bash, nor does it aim to be one. > I am launching it with this command as I don't want it to make any noise > at all when its running, just do its job: > > bin/mailwatcher 2>&1 >/dev/null & > > But when I run it with dash, it doesn't seem to work right, and spams the > terminal with its error messages. One that appears to kill its function > is the bashism of using [[ ]] to surround string variables, reported > like this: > bin/mailwatcher: 64: bin/mailwatcher: [[: not found > bin/mailwatcher: 70: bin/mailwatcher: [[: not found > bin/mailwatcher: 77: bin/mailwatcher: [[: not found > > Which is nice, as I am seeing the reason it fails. Line 64 to illuminate > that is: > if [[ ${InMail} = 'gene' ]] > The other 2 lines are similar except for 'gene' > The return from inotifywait is what sets the value of ${InMail} > Can these lines be re-constructed to be valid for either bash or dash? > If so how? https://wiki.ubuntu.com/DashAsBinSh has some information how to make scripts portable. The checkbashisms command in the devscripts package can help you detect common non-portable constructions in your scripts. Cheers, Sven