Is this a bug in the test script? I'm mildly surprised that asking for
ls --sort-option-that-doesnt-exist
counts as a pass in this loop.

# Check default name sorting works
for def_sort in '' '--sort=name' '-U --sort=name' '--sort-name -t'; do
  set $(ls $def_sort a B c)
  test "$*" = 'B a c' || fail=1
done

The problem running under /bin/sh (whether or not it's bash) without the 
errexit/nounset options is that we need to check carefully whether a command 
worked, or failed with no output:

+ for def_sort in '' '--sort=name' '-U --sort=name' '--sort-name -t'
++ ls --sort-name -t a B c
ls: unrecognized option '--sort-name'
Try 'ls --help' for more information.
+ set
AWK=gawk
BASH=/bin/sh
# etc.

Here we see that `set` called argv-less is, as requested, printing the shell 
variables and functions.

The patch below suffices to reset the positional parameters at the end of each 
loop, preventing the previous run's output from erroneously passing into the 
next loop.


Cheers,
Phil

diff --git a/tests/ls/ls-time.sh b/tests/ls/ls-time.sh
index a261ae118..d385c1c6d 100755
--- a/tests/ls/ls-time.sh
+++ b/tests/ls/ls-time.sh
@@ -40,6 +40,7 @@ touch -m -d "$t1" c || framework_failure_
 for def_sort in '' '--sort=name' '-U --sort=name' '-t --sort=name'; do
   set $(ls $def_sort a B c)
   test "$*" = 'B a c' || fail=1
+  set --
 done

 touch -a -d "$u3" c || framework_failure_

Reply via email to