Op 05-03-16 om 18:23 schreef Thorsten Glaser: > Martijn Dekker dixit: > >> Ah yes, I didn't think of the hardcoded /usr/bin/true path, oops. >> >> That's nothing that can't be fixed with a simple regex. > >> Finally, an external command was still missing from the test and it >> seems like a good idea to add one. > > I don’t think so, what do you make of true=ENOENT
The existence of 'true' as an external command somewhere in the default system $PATH (whatever that is) is mandated by POSIX, as it is for all regular builtins, and this is also the historical practice. Consequently, 'whence -p true' should always work given a default path, unless the system is so broken that the user has bigger problems to worry about than mksh bugs. > and /system/bin/ls > or *shudder* ls.exe? (These are the challenges mksh faces…) The attached version matches .*/true.* and .*/ls.* so any possible path and any possible extensions are covered. - M.
Index: check.t =================================================================== RCS file: /cvs/src/bin/mksh/check.t,v retrieving revision 1.728 diff -u -r1.728 check.t --- check.t 5 Mar 2016 15:40:00 -0000 1.728 +++ check.t 10 Mar 2016 19:37:04 -0000 @@ -12202,17 +12202,17 @@ words, and command -p[vV] should find aliases, reserved words, and builtins over external commands. stdin: - PATH=/bin:/usr/bin + PATH=$(command -p getconf PATH 2>/dev/null) || PATH=/bin:/usr/bin alias foo="bar baz" bar() { :; } - for word in 'if' 'foo' 'bar' 'set' 'true'; do + for word in 'if' 'foo' 'bar' 'set' 'true' 'ls'; do command -v "$word" command -pv "$word" command -V "$word" command -pV "$word" done -expected-stdout: - if +expected-stdout-pattern: + /^if if if is a reserved word if is a reserved word @@ -12232,25 +12232,28 @@ true true is a shell builtin true is a shell builtin + .*\/ls.* + .*\/ls.* + ls is a tracked alias for .*\/ls.* + ls is .*\/ls.*$/ --- name: whence-preserve-tradition description: This regression test is to ensure that the POSIX compatibility changes for 'command' (see previous test) do not affect traditional 'whence' behaviour. -category: os:mirbsd stdin: - PATH=/bin:/usr/bin + PATH=$(command -p getconf PATH 2>/dev/null) || PATH=/bin:/usr/bin alias foo="bar baz" bar() { :; } - for word in 'if' 'foo' 'bar' 'set' 'true'; do + for word in 'if' 'foo' 'bar' 'set' 'true' 'ls'; do whence "$word" whence -p "$word" whence -v "$word" whence -pv "$word" done -expected-stdout: - if +expected-stdout-pattern: + /^if if is a reserved word if not found 'bar baz' @@ -12263,9 +12266,13 @@ set is a special shell builtin set not found true - /bin/true + .*\/true.* true is a shell builtin - true is a tracked alias for /bin/true + true is a tracked alias for .*\/true.* + .*\/ls.* + .*\/ls.* + ls is a tracked alias for .*\/ls.* + ls is a tracked alias for .*\/ls.*$/ --- name: duffs-device description: