Eric Blake <[EMAIL PROTECTED]> wrote: > According to Jim Meyering on 4/16/2008 6:57 AM: > | $ PATH=. /bin/sh -c 'exec mknod --version'|head -1 > | /bin/sh: mknod: --: unknown option > > Ouch - this looks like a POSIX compliance bug in exec; I'm adding > bug-autoconf to the distribution in case we want to document this corner > case bug in the shell portability section. POSIX states that exec is > supposed to bypass shell builtins (and while special shell builtins, like > 'exit', give undefined behavior when passed to exec, regular shell > builtins, like 'fg', are required to exist in PATH even if they can't > quite do as much work as their builtin counterpart). Do you know which > shell heritage the OpenBSD /bin/sh derives from? > > | $ PATH=. /bin/sh -c 'nice mknod --version' | head -1 > | mknod (GNU coreutils) 6.10.188-7cb24 > > | So I'll go with nice. > > Sounds nice to me (sorry, couldn't resist :)
Here's the patch I've just pushed: >From 57ae7da07593ab0134e120ea79819fdd069563a1 Mon Sep 17 00:00:00 2001 From: Jim Meyering <[EMAIL PROTECTED]> Date: Wed, 16 Apr 2008 15:28:33 +0200 Subject: [PATCH] tests: accommodate built-in mknod more cleanly * tests/mkdir/selinux: Undo most of previous change, bc22dbbf844f31ddaf2e68b167d0128a985d73ab, and instead invoke the command via "nice". Using "exec" should be enough, but isn't with OpenBSD's PD KSH v5.2.14 99/07/13.2. Eric Blake suggested using nice. Signed-off-by: Jim Meyering <[EMAIL PROTECTED]> --- tests/mkdir/selinux | 12 ++++-------- 1 files changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/mkdir/selinux b/tests/mkdir/selinux index 4363275..45c2399 100755 --- a/tests/mkdir/selinux +++ b/tests/mkdir/selinux @@ -34,16 +34,12 @@ fi c=invalid-selinux-context msg="failed to set default file creation context to \`$c':" -# In OpenBSD's /bin/sh, mknod is a shell built-in. -# In that case, just skip the mknod test. -( mknod --version 2>&1 ) | grep 'GNU coreutils' \ - && mknod='mknod b p' \ - || mknod='mkdir dir' - # Test each of mkdir, mknod, mkfifo with "-Z invalid-context". -for cmd_w_arg in 'mkdir dir' "$mknod" 'mkfifo f'; do - $cmd_w_arg -Z $c 2> out && fail=1 +for cmd_w_arg in 'mkdir dir' 'mknod b p' 'mkfifo f'; do + # In OpenBSD's /bin/sh, mknod is a shell built-in. + # Running via "nice" ensures we run our program and not the built-in. + nice -- $cmd_w_arg -Z $c 2> out && fail=1 set $cmd_w_arg; cmd=$1 echo "$cmd: $msg" > exp || fail=1 -- 1.5.5.56.gbcf7f _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils