On 16.05.2014 17:09, Eric Blake wrote:
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)
The more you know... (and of course I meant "$source_iotests" in the
second step)
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.
I feared so. *g*
Max