Re: [Qemu-devel] [PATCH v2] tests: Use command -v instead of which(1) in shell scripts
On Wed, Nov 19, 2014 at 03:07:12PM +0800, Fam Zheng wrote: When which(1) is not installed, we would complain perl not found because it's the first set_prog_path check. The error message is wrong. Fix it by using command -v, a native way to query the existence of a command. Suggested-by: Eric Blake ebl...@redhat.com Signed-off-by: Fam Zheng f...@redhat.com --- v2: Use command -v as suggested by Eric. Also change a few other occasions of which(1) in tests/qemu-iotests/common. --- tests/qemu-iotests/common| 8 tests/qemu-iotests/common.config | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) Thanks, applied to my block-next tree: https://github.com/stefanha/qemu/commits/block-next Stefan pgphGRfvooPu7.pgp Description: PGP signature
Re: [Qemu-devel] [PATCH v2] tests: Use command -v instead of which(1) in shell scripts
On 11/19/2014 12:07 AM, Fam Zheng wrote: When which(1) is not installed, we would complain perl not found because it's the first set_prog_path check. The error message is wrong. Fix it by using command -v, a native way to query the existence of a command. Suggested-by: Eric Blake ebl...@redhat.com Signed-off-by: Fam Zheng f...@redhat.com +++ b/tests/qemu-iotests/common.config @@ -47,7 +47,7 @@ export PWD=`pwd` # $1 = prog to look for, $2* = default pathnames if not found in $PATH set_prog_path() { -p=`which $1 2 /dev/null` +p=`command -v $1 2 /dev/null` Reviewed-by: Eric Blake ebl...@redhat.com if [ -n $p -a -x $p ]; then Unrelated: this line works because this is a /bin/bash script, but it is non-portable. Use of -a and -o inside [] is a mistake waiting to happen. For example, is [ ! $a -a $b ] supposed to be true or false for all values of $a and $b? Naively, this says return true if '! $a' (a is empty) and '$b' (b is non-empty); but if $a is '(' and $b is ')' it could also be parsed as returning the negation of whether the parenthesized string -a is non-empty. Use of -a and -o in [[]] is a bit better, but I still HIGHLY recommend that constructs like this be rewritten as [ -n $p ] [ -x $p ] for avoidance of confusion and prevention of copy-pasting the test to non-bash shells. But that would be a separate patch. -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [Qemu-devel] [PATCH v2] tests: Use command -v instead of which(1) in shell scripts
On 19 November 2014 13:19, Eric Blake ebl...@redhat.com wrote: Use of -a and -o in [[]] is a bit better, but I still HIGHLY recommend that constructs like this be rewritten as [ -n $p ] [ -x $p ] for avoidance of confusion and prevention of copy-pasting the test to non-bash shells. But that would be a separate patch. Yeah, this is one of those issues I tend to pick up in patches which change our shell scripts, but we still have a fair amount of existing code that isn't up to that standard. -- PMM
[Qemu-devel] [PATCH v2] tests: Use command -v instead of which(1) in shell scripts
When which(1) is not installed, we would complain perl not found because it's the first set_prog_path check. The error message is wrong. Fix it by using command -v, a native way to query the existence of a command. Suggested-by: Eric Blake ebl...@redhat.com Signed-off-by: Fam Zheng f...@redhat.com --- v2: Use command -v as suggested by Eric. Also change a few other occasions of which(1) in tests/qemu-iotests/common. --- tests/qemu-iotests/common| 8 tests/qemu-iotests/common.config | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common index 9e12bec..bc27f6a 100644 --- a/tests/qemu-iotests/common +++ b/tests/qemu-iotests/common @@ -289,10 +289,10 @@ testlist options if [ ! -z $DISPLAY ] then -which xdiff /dev/null 21 diff=xdiff -which gdiff /dev/null 21 diff=gdiff -which tkdiff /dev/null 21 diff=tkdiff -which xxdiff /dev/null 21 diff=xxdiff +command -v xdiff /dev/null 21 diff=xdiff +command -v gdiff /dev/null 21 diff=gdiff +command -v tkdiff /dev/null 21 diff=tkdiff +command -v xxdiff /dev/null 21 diff=xxdiff fi ;; diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config index bd6790b..91a5ef6 100644 --- a/tests/qemu-iotests/common.config +++ b/tests/qemu-iotests/common.config @@ -47,7 +47,7 @@ export PWD=`pwd` # $1 = prog to look for, $2* = default pathnames if not found in $PATH set_prog_path() { -p=`which $1 2 /dev/null` +p=`command -v $1 2 /dev/null` if [ -n $p -a -x $p ]; then echo $p return 0 -- 1.9.3