On 05/16/2014 08:43 AM, Max Reitz wrote: >>> + source_iotests="$(cd "$(dirname "$(readlink "$0")")"; pwd)" >> This is potentially dangerous. If readlink or dirname fails, you can >> invoke cd "" (which on bash is stupidly a no-op instead of an error), >> and end up calling pwd in the wrong directory. But in the common case >> it works, so I'm not sure it's worth bending over backwards to make it >> more robust. > > I guess using something like > > source_iotests="$(dirname "$(readlink "$0")")"; if [ -z "$source_iotests" ]; > then; /* abort */; fi; > source_iotests="$(cd "$dirname"; pwd)" > > should work better, then?
Or even safer with source_iotests=$(cd "$dirname" && pwd) || /* abort */ in the second step, to ensure both the cd and pwd commands succeeded. (By the way, assignment context does not require "" when passing a single shell word, such as command substitution, so foo=$(...) and foo="$(...)" are identical) > >> Is [ ! '(' -o ')' ] true or false? Depends on whether it was parsed as { >> ! '(' } -o ')' (false -o true => true) or as ! { '(' -o ')' } (! (true >> -o true) => false) >> >> But this is bash, so you could do: >> >> if [[ $arch && -x $build_root/$arch-softmmu/qemu-system-$arch ]] >> >> for less typing, and no risk of [] ambiguity. > > If you're telling me I'm free to use bashisms, I'll believe you. :-) Well, the script IS being run by /bin/bash, and you already ARE using bashisms elsewhere. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature