[Bug 1331814] [NEW] Warning messages for handlers are never called

Hamilton Turner hamiltont at gmail.com
Wed Jun 18 21:13:15 UTC 2014


Public bug reported:

Multiple handlers use the following syntax:

     eval set -- "$(getopt -o '' -l interpreter: -- "$@")" || {
warn_getopt %pre; return; }

As mentioned in "/usr/share/doc/util-linux-ng-2.17.2/getopt-parse.bash", this will never
call the warning:

    # We need TEMP as the `eval set --' would nuke the return value of getopt.
   TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
      -n 'example.bash' -- "$@"`

Here is a simple example to prove this:

    #!/bin/sh
    trap 'echo ERROR happened' ERR
    echo begin
    eval set -- "$(false)"
    echo end

Because of this, almost every bug report mentions something along the
lines of "getopt printed an error". This is getout outputting to stderr,
but the non-zero exit code is being swallowed and errexit is not
happening.

This coding was probably designed intentionally to disable automatic
exit whenever getopt found an unexpected argument, due to the fact that
this (currently) happens on almost every kickstart file as our syntax
support is quite limited.

However, it also hides the warning from the user, which I believe is the
real bug. Moreover, the only error is printed briefly to a terminal and
then never seen again, which makes it tough for people to put in bug
reports.

Perhaps a better solution would be to use set +x and set -e to
temporarily disable errexit, and use a trap on ERR to ensure that these
errors are caught and printed to both syslog and the current TTY.

** Affects: kickseed (Ubuntu)
     Importance: Undecided
         Status: New

** Description changed:

  Multiple handlers use the following syntax:
  
-         eval set -- "$(getopt -o '' -l interpreter: -- "$@")" || {
+      eval set -- "$(getopt -o '' -l interpreter: -- "$@")" || {
  warn_getopt %pre; return; }
  
- As mentioned in "/usr/share/doc/util-linux-ng-2.17.2/getopt-parse.bash", this will never 
- call the warning: 
+ As mentioned in "/usr/share/doc/util-linux-ng-2.17.2/getopt-parse.bash", this will never
+ call the warning:
  
-     # We need TEMP as the `eval set --' would nuke the return value of getopt.
-    TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
-       -n 'example.bash' -- "$@"`
+     # We need TEMP as the `eval set --' would nuke the return value of getopt.
+    TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
+       -n 'example.bash' -- "$@"`
  
  Here is a simple example to prove this:
  
-     #!/bin/sh
-     trap 'echo ERROR happened' ERR
-     echo begin
-     eval set -- "$(false)"
-     echo end
+     #!/bin/sh
+     trap 'echo ERROR happened' ERR
+     echo begin
+     eval set -- "$(false)"
+     echo end
  
  Because of this, almost every bug report mentions something along the
  lines of "getopt printed an error". This is getout outputting to stderr,
- but the exit code is being swallowed and errexit is not happening.
+ but the non-zero exit code is being swallowed and errexit is not
+ happening.
  
  This coding was probably designed intentionally to disable automatic
  exit whenever getopt found an unexpected argument, due to the fact that
  this (currently) happens on almost every kickstart file as our syntax
  support is quite limited.
  
  However, it also hides the warning from the user, which I believe is the
  real bug. Moreover, the only error is printed briefly to a terminal and
  then never seen again, which makes it tough for people to put in bug
  reports.
  
  Perhaps a better solution would be to use set +x and set -e to
  temporarily disable errexit, and use a trap on ERR to ensure that these
  errors are caught and printed to both syslog and the current TTY.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to kickseed in Ubuntu.
https://bugs.launchpad.net/bugs/1331814

Title:
  Warning messages for handlers are never called

Status in “kickseed” package in Ubuntu:
  New

Bug description:
  Multiple handlers use the following syntax:

       eval set -- "$(getopt -o '' -l interpreter: -- "$@")" || {
  warn_getopt %pre; return; }

  As mentioned in "/usr/share/doc/util-linux-ng-2.17.2/getopt-parse.bash", this will never
  call the warning:

      # We need TEMP as the `eval set --' would nuke the return value of getopt.
     TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
        -n 'example.bash' -- "$@"`

  Here is a simple example to prove this:

      #!/bin/sh
      trap 'echo ERROR happened' ERR
      echo begin
      eval set -- "$(false)"
      echo end

  Because of this, almost every bug report mentions something along the
  lines of "getopt printed an error". This is getout outputting to
  stderr, but the non-zero exit code is being swallowed and errexit is
  not happening.

  This coding was probably designed intentionally to disable automatic
  exit whenever getopt found an unexpected argument, due to the fact
  that this (currently) happens on almost every kickstart file as our
  syntax support is quite limited.

  However, it also hides the warning from the user, which I believe is
  the real bug. Moreover, the only error is printed briefly to a
  terminal and then never seen again, which makes it tough for people to
  put in bug reports.

  Perhaps a better solution would be to use set +x and set -e to
  temporarily disable errexit, and use a trap on ERR to ensure that
  these errors are caught and printed to both syslog and the current
  TTY.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/kickseed/+bug/1331814/+subscriptions



More information about the foundations-bugs mailing list