[v2] sotruss: convert from ksh to bash
Commit Message
This script works fine under bash (which we already require), so tweak
the code to be pure bash.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2014-01-23 Mike Frysinger <vapier@gentoo.org>
* elf/Makefile: Delete $(have-ksh) check.
($(objpfx)sotruss): Change KSH to BASH.
* elf/sotruss.ksh: Rename to ...
* elf/sotruss.sh: ... this. Change @KSH@ to @BASH@. Change
function style to match bash.
---
elf/Makefile | 6 +++---
elf/{sotruss.ksh => sotruss.sh} | 8 ++++----
2 files changed, 7 insertions(+), 7 deletions(-)
rename elf/{sotruss.ksh => sotruss.sh} (98%)
Comments
> This script works fine under bash (which we already require), so tweak
> the code to be pure bash.
I don't think we've documented anywhere that our installed scripts require
bash. Some of them already do, so this is not something you're changing
here. But before "we already require foo" should generally be considered
an adequate rationale for a change by itself, it should be a requirement
that we have made explicit and documented, rather than just a de facto
requirement that might have snuck in without clear intent.
I think removing the ksh check is fine.
I also think the changes to the script are fine, but they are purely
cosmetic and wholly unnecessary. Your "pure bash" and "to match bash"
comments seem to imply that "function foo {" style is somehow less
supported by bash than "foo() {", which AFAIK has never been the case.
On Thu 13 Mar 2014 15:30:05 Roland McGrath wrote:
> > This script works fine under bash (which we already require), so tweak
> > the code to be pure bash.
>
> I don't think we've documented anywhere that our installed scripts require
> bash. Some of them already do, so this is not something you're changing
> here. But before "we already require foo" should generally be considered
> an adequate rationale for a change by itself, it should be a requirement
> that we have made explicit and documented, rather than just a de facto
> requirement that might have snuck in without clear intent.
sotruss itself doesn't work if you don't have bash or ksh. so what i am
changing is that ksh is no longer supported.
afaict, the only reason bash is required is for localization of the messages.
but even that works w/POSIX shell, albeit with slightly funky display -- you
get a literal $ in the output of each string.
> I also think the changes to the script are fine, but they are purely
> cosmetic and wholly unnecessary. Your "pure bash" and "to match bash"
> comments seem to imply that "function foo {" style is somehow less
> supported by bash than "foo() {", which AFAIK has never been the case.
true, the current code works under bash unmodified. really i'm fixing the
code to be portable to pretty much any shell. force of habit that i see this
style and think "that's not valid".
so i guess i'll rewrite this to say "drop ksh support and add basic support
for any POSIX shell".
-mike
On Thu, 13 Mar 2014, Mike Frysinger wrote:
> afaict, the only reason bash is required is for localization of the messages.
> but even that works w/POSIX shell, albeit with slightly funky display -- you
> get a literal $ in the output of each string.
We know we want to avoid $"" (bug 13853) - some patches were posted in Nov
2012. I suppose those need revising to take account of any patch reviews
and updating as needed.
On 2014-03-13 19:36, Joseph S. Myers wrote:
> On Thu, 13 Mar 2014, Mike Frysinger wrote:
>
>> afaict, the only reason bash is required is for localization of the messages.
>> but even that works w/POSIX shell, albeit with slightly funky display -- you
>> get a literal $ in the output of each string.
>
> We know we want to avoid $"" (bug 13853) - some patches were posted in Nov
> 2012. I suppose those need revising to take account of any patch reviews
> and updating as needed.
Yes, I (the submitter of those patches) have been meaning to revisit
this. I may post an RFC and/or patches for this later in the 2.20 or
2.21 cycle, unless someone beats me to it.
As Mike notes, scripts with `$""` already run fine on any shell, just
with `$` in the output. (And as noted in BZ #13853, xgettext prints
lots of warnings.)
AFAIK sotruss is the last install-time or run-time script that requires
a specific shell (now that ldd, tzselect, and a couple of scripts under
sysdeps/unix/ have recently become more portable). So with Mike's
patch, Bash is no longer in any way required to install or run glibc.
Roland McGrath <roland@hack.frob.com> writes:
> I also think the changes to the script are fine, but they are purely
> cosmetic and wholly unnecessary. Your "pure bash" and "to match bash"
> comments seem to imply that "function foo {" style is somehow less
> supported by bash than "foo() {", which AFAIK has never been the case.
function foo is non-POSIX (POSIX reserves the function keyword, but
doesn't add any meaning to it). Bash only supports function for
ksh-compatibility, but otherwise prefers the POSIX syntax.
Andreas.
@@ -93,7 +93,7 @@ pldd-modules := xmalloc
# To find xmalloc.c and xstrdup.c
vpath %.c ../locale/programs
-ifeq ($(have-ksh)$(build-shared),yesyes)
+ifeq ($(build-shared),yes)
extra-objs += sotruss-lib.os sotruss-lib.so
install-others += $(inst_auditdir)/sotruss-lib.so
install-bin-script += sotruss
@@ -104,8 +104,8 @@ $(objpfx)sotruss-lib.so: $(objpfx)sotruss-lib.os
$(objpfx)sotruss-lib.so: $(common-objpfx)libc.so $(objpfx)ld.so \
$(common-objpfx)libc_nonshared.a
-$(objpfx)sotruss: sotruss.ksh $(common-objpfx)config.make
- sed -e 's%@KSH@%$(KSH)%g' \
+$(objpfx)sotruss: sotruss.sh $(common-objpfx)config.make
+ sed -e 's%@BASH@%$(BASH)%g' \
-e 's%@VERSION@%$(version)%g' \
-e 's%@TEXTDOMAINDIR@%$(msgcatdir)%g' \
-e 's%@PREFIX@%$(prefix)%g' \
similarity index 98%
rename from elf/sotruss.ksh
rename to elf/sotruss.sh
@@ -1,4 +1,4 @@
-#! @KSH@
+#! @BASH@
# Copyright (C) 2011-2014 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
@@ -28,7 +28,7 @@ unset SOTRUSS_NOINDENT
SOTRUSS_WHICH=$$
lib='@PREFIX@/$LIB/audit/sotruss-lib.so'
-function do_help {
+do_help() {
echo $"Usage: sotruss [OPTION...] [--] EXECUTABLE [EXECUTABLE-OPTION...]
-F, --from FROMLIST Trace calls from objects on FROMLIST
-T, --to TOLIST Trace calls to objects on TOLIST
@@ -51,13 +51,13 @@ function do_help {
exit 0
}
-function do_missing_arg {
+do_missing_arg() {
printf >&2 $"%s: option requires an argument -- '%s'\n" sotruss "$1"
printf >&2 $"Try \`%s --help' or \`%s --usage' for more information.\n" sotruss sotruss
exit 1
}
-function do_ambiguous {
+do_ambiguous() {
printf >&2 $"%s: option is ambiguous; possibilities:"
while test $# -gt 0; do
printf >&2 " '%s'" $1