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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to