View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000163 | 1003.1(2008)/Issue 7 | Shell and Utilities | public | 2009-10-08 15:28 | 2013-04-16 13:06 |
Reporter | msbrown | Assigned To | ajosey | ||
Priority | normal | Severity | Editorial | Type | Error |
Status | Closed | Resolution | Accepted As Marked | ||
Name | Mark Brown | ||||
Organization | IBM | ||||
User Reference | |||||
Section | 2.14 trap | ||||
Page Number | 2369-2370 | ||||
Line Number | 74930-74934 | ||||
Interp Status | --- | ||||
Final Accepted Text | 0000163:0000252 | ||||
Summary | 0000163: Problems in rationale of trap shell builtin | ||||
Description | SUSv4> Set a trap so the logout utility in the directory referred SUSv4> to by the HOME environment variable executes when the shell SUSv4> terminates: SUSv4> SUSv4> trap '$HOME/logout' EXIT That should be: trap '"$HOME/logout"' EXIT trap '~/logout' EXIT ($HOME expanded on exit) or: trap "$HOME/logout" EXIT trap ~/logout EXIT ($HOME expanded upon evaluation of that trap command). Later on: SUSv4> The command: SUSv4> SUSv4> trap '$cmd' 0 SUSv4> SUSv4> causes the contents of the shell variable cmd to be SUSv4> executed as a command when the shell exits. Using SUSv4> double-quotes instead of single-quotes might have SUSv4> unexpected behavior, since in theory the value of cmd SUSv4> might be a decimal integer which would be treated as SUSv4> a condition, not an action; or cmd might begin with SUSv4> '-' . I find that misleading at best. trap "$cmd" 0 (or trap ";$cmd" 0 if you want to account for possible $cmd's that start with "-" or are decimal numbers which would be quite odd) ($cmd meant to be shell code to be executed on exit) trap '"$cmd"' 0 ($cmd being the name of a command to be executed) trap 'eval -- "$cmd"' 0 ($cmd meant to be shell code to be executed on exit, but this time $cmd is expanded upon the action execution). all make sense to me. But trap '$cmd' 0 doesn't For instance, in; cmd='echo "* exit now *" >&2' trap '$cmd' 0 assuming that $IFS has been unchanged upon exit would output the list of filenames in the current directory that start with a double-quote, followed by "exit now" followed by the filenames that end with a double-quote (or *" if there's none), followed by ">&2". atexit='echo bye >&2' trap "$atexit" 0 or: atexit='echo bye >&2' trap 'eval "$atexit" 0' ... atexit='echo ciao >&2' ... (though in that case, I'd prefer: atexit() { echo bye >&2; } trap atexit 0 ... atexit() { echo ciao >&2; } ) make more sense. SUSv4> Also, using double-quotes will cause the value SUSv4> of cmd to be expanded twice, once when trap is SUSv4> executed, and once when the condition arises. Well no, it will be expanded upon evaluating the trap command, and that expanded content will be evaluated upon exit, which is quite the behavior I would expect. | ||||
Desired Action | change trap '$HOME/logout' EXIT to be trap '"$HOME/logout"' EXIT ($HOME expanded on exit) or: trap "$HOME/logout" EXIT ($HOME expanded upon evaluation of that trap command). | ||||
Tags | tc1-2008 |
|
Proposed changes...On line 74932 and line 74934 change '$HOME/logout' to '"$HOME"/logout' At line 74956 change The command: trap '$cmd' 0 causes the contents of the shell variable cmd to be executed as a command when the shell exits. Using double-quotes instead of single-quotes might have unexpected behavior, since in theory the value of cmd might be a decimal integer which would be treated as a condition, not an action; or cmd might begin with ’−’. Also, using double-quotes will cause the value of cmd to be expanded twice, once when trap is executed, and once when the condition arises. to The command: trap 'eval " $cmd"' 0 causes the contents of the shell variable cmd to be executed as a command when the shell exits. Using trap '$cmd' 0 does not work correctly if cmd contains any special characters such as quoting or redirections. Using trap " $cmd" 0 also works (the leading space character protects against unlikely cases where cmd is a decimal integer or begins with ’−’), but it expands the cmd variable when the trap command is executed, not when the exit action is executed. At page 2343 line 74116 section eval, change the APPLICATION USAGE section from None to Since eval is not required to recognize the "--" end of options delimiter, in cases where the argument(s) to eval might begin with '-' it is recommended that the first argument is prefixed by a string that will not alter the commands to be executed, such as a space character: eval " $commands" or eval " $(some_command)" At page 2344 line 74126 section eval, change the RATIONALE section from None to This standard allows, but does not require, eval to recognize "--". Although this means applications cannot use "--" to protect against options supported as an extension (or errors reported for unsupported options), the nature of the eval utility is such that other means can be used to provide this protection (see APPLICATION USAGE above). |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-10-08 15:28 | msbrown | New Issue | |
2009-10-08 15:28 | msbrown | Status | New => Under Review |
2009-10-08 15:28 | msbrown | Assigned To | => ajosey |
2009-10-08 15:28 | msbrown | Name | => Mark Brown |
2009-10-08 15:28 | msbrown | Organization | => IBM |
2009-10-08 15:28 | msbrown | Section | => 2.14 trap |
2009-10-08 15:28 | msbrown | Page Number | => 2369-2370 |
2009-10-08 15:28 | msbrown | Line Number | => 74930-74934 |
2009-10-08 15:28 | msbrown | Interp Status | => --- |
2009-10-08 15:32 | msbrown | Desired Action Updated | |
2009-10-08 15:33 | msbrown | Desired Action Updated | |
2009-10-09 09:46 | geoffclare | Note Added: 0000252 | |
2009-10-15 15:34 | msbrown | Final Accepted Text | => 0000163:0000252 |
2009-10-15 15:34 | msbrown | Status | Under Review => Resolved |
2009-10-15 15:34 | msbrown | Resolution | Open => Accepted As Marked |
2010-08-27 13:07 | ajosey | Tag Attached: tc1-2008 | |
2010-09-07 11:39 | geoffclare | Status | Resolved => Under Review |
2010-09-07 11:39 | geoffclare | Resolution | Accepted As Marked => Reopened |
2010-09-09 16:04 | geoffclare | Note Edited: 0000252 | |
2010-09-09 16:05 | geoffclare | Status | Under Review => Resolved |
2010-09-09 16:05 | geoffclare | Resolution | Reopened => Accepted As Marked |
2013-04-16 13:06 | ajosey | Status | Resolved => Closed |
2016-02-23 21:36 | eblake | Relationship added | related to 0000252 |
2021-11-04 15:28 | eblake | Relationship added | related to 0001440 |