Am 14.01.2013 14:33, schrieb Greg Wooledge: > On Sun, Jan 13, 2013 at 03:31:24AM +0100, John Kearney wrote: >> set -o errexit >> test_func() { >> [ ! -d test ] && echo test2 >> } >> >> echo test3 >> test_func >> echo test4 >> >> now so long as test doesn't exist in the cwd it should errexit. >> at least it did for me just now. > Cannot reproduce. > > imadev:~$ cat bar > #!/bin/bash > > set -e > f() { test ! -d nosuchdir && echo no dir; } > f > echo survived > imadev:~$ ./bar > no dir > survived
the "no dir" above means that the test didn't fail. The exit only happens if the test fails. Sorry I keep seeming to make typos. I really need more sleep. this should exit. #!/bin/bash set -e f() { test -d nosuchdir && echo no dir; } echo testings f echo survived All I was pointing out that its safer to use syntax [] || or [] && || you always need a || on a one liner to make sure the return value of the line is a 0. this isn't necessary in the script body I think but in a function it is, unless its the last command then it will be auto returned.. but lets say you want to do 2 things in a function you have to do something like. f(){ mkdir "${1%/*}" ||return $? # so the line doesn't return an error. touch "${1}" } any way it is nearly always something that should be being done anyway. It only the conditional one liners that tend to frustrate people a lot from what I've seen.