diff options
author | Stefano Lattarini <stefano.lattarini@gmail.com> | 2011-06-18 17:57:53 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2011-06-19 21:57:43 +0200 |
commit | 2f60384d6abc787f5c4dfb5e9bffa328265b3028 (patch) | |
tree | f3875507368572d2c2a38be2530bca1fe68545bd /tests/shell-or-perl | |
parent | a51c6e0356e5c66fd9c2539f220c6cd2ad2de1e7 (diff) | |
download | coreutils-2f60384d6abc787f5c4dfb5e9bffa328265b3028.tar.xz |
tests: avoid extra forks in the testsuite
* tests/shell-or-perl: Prefer the `read' builtin over `grep' to
look at the shebang line of test scripts. Since `read' is a
special builtin, it might abort the whole program upon failures,
so add extra sanity checks, verifying that the test script exists
and is readable, before trying to read from it.
Diffstat (limited to 'tests/shell-or-perl')
-rw-r--r-- | tests/shell-or-perl | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/tests/shell-or-perl b/tests/shell-or-perl index 08604eb5d..accb37a85 100644 --- a/tests/shell-or-perl +++ b/tests/shell-or-perl @@ -84,12 +84,19 @@ test -z "$test_name" && test_name=$test_script # Run the test script # # --------------------- # -if grep '^#!/usr/bin/perl' "$test_script" >/dev/null; then +test -f "$test_script" && test -r "$test_script" \ + || error_ "test script '$test_script' does not exist, or isn't readable" + +read shebang_line < "$test_script" \ + || error_ "cannot read from the test script '$test_script'" + +case $shebang_line in +'#!/usr/bin/perl'*) # The test is a perl script. if $cu_PERL -e 'use warnings' > /dev/null 2>&1; then # Perl is available, see if we must run the test with taint # mode on or not. - grep '^#!/usr/bin/perl -T' "$test_script" >/dev/null && T_=T || T_= + case $shebang_line in *\ -T*) T_=T;; *) T_=;; esac # Now run it. exec $cu_PERL -w$T_ -I"$srcdir" -MCoreutils -MCuSkip \ -M"CuTmpdir qw($test_name)" \ @@ -99,10 +106,11 @@ if grep '^#!/usr/bin/perl' "$test_script" >/dev/null; then echo "$test_name: skip: no usable version of Perl found" exit 77 fi -else + ;; +*) # Assume the test is a shell script. exec $cu_SHELL "$test_script" ${1+"$@"} -fi +esac # ------------- # # Not reached # |