* Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] @ 2011-08-19 6:36 Andras Major 2011-08-19 13:33 ` Eric Schulte 0 siblings, 1 reply; 12+ messages in thread From: Andras Major @ 2011-08-19 6:36 UTC (permalink / raw) To: emacs-orgmode Hello, here is an example of apparently erroneous behaviour of the :results switch. In this example, we use an sh block, but it also appears to affect other languages (will need more investigation). Example Org code: #+begin_src sh :exports output echo "Hello World 1" #+end_src #+results: : Hello World 1 #+begin_src sh :exports value echo "Hello World 2" #+end_src #+results: : Hello World 2 Am I missing something here or should the second instance really output something like an integer exit value from echo? Cheers, András Emacs : GNU Emacs 23.2.1 (i486-pc-linux-gnu, GTK+ Version 2.20.0) of 2010-12-11 on raven, modified by Debian Package: Org-mode version 7.7 (release_7.7.107.g7a82) current state: ============== (setq org-export-latex-after-initial-vars-hook '(org-beamer-after-initial-vars) org-speed-command-hook '(org-speed-command-default-hook org-babel-speed-command-hook) org-babel-load-languages '((asymptote . t) (ditaa . t) (dot . t) (gnuplot . t) (haskell . t) (latex . t) (octave . t) (R . t) (ruby . t) (scheme . t) (sh . t)) org-metaup-hook '(org-babel-load-in-session-maybe) org-after-todo-state-change-hook '(org-clock-out-if-current) org-babel-tangle-lang-exts '(("ruby" . "rb") ("latex" . "tex") ("haskell" . "hs") ("asymptote" . "asy") ("emacs-lisp" . "el")) org-export-blocks-postblock-hook '(org-exp-res/src-name-cleanup) org-export-latex-format-toc-function 'org-export-latex-format-toc-default org-tab-first-hook '(org-hide-block-toggle-maybe org-src-native-tab-command-maybe org-babel-hide-result-toggle-maybe) org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer) org-confirm-shell-link-function 'yes-or-no-p org-export-first-hook '(org-beamer-initialize-open-trackers) org-agenda-before-write-hook '(org-agenda-add-entry-text) org-babel-pre-tangle-hook '(save-buffer) org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-hide-drawers org-cycle-show-empty-lines org-optimize-window-after-visibility-change) org-export-preprocess-before-normalizing-links-hook '(org-remove-file-link-modifiers) org-mode-hook '(#[nil "\300\301\302\303\304$\207" [org-add-hook change-major-mode-hook org-show-block-all append local] 5] #[nil "\300\301\302\303\304$\207" [org-add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes) org-ctrl-c-ctrl-c-hook '(org-babel-hash-at-point org-babel-execute-safely-maybe) org-confirm-elisp-link-function 'yes-or-no-p org-export-interblocks '((lob org-babel-exp-lob-one-liners) (src org-babel-exp-inline-src-blocks)) org-clock-out-hook '(org-clock-remove-empty-clock-drawer) org-occur-hook '(org-first-headline-recenter) org-from-is-user-regexp nil org-export-preprocess-before-selecting-backend-code-hook '(org-beamer-select-beamer-code) org-confirm-babel-evaluate nil org-export-latex-final-hook '(org-beamer-amend-header org-beamer-fix-toc org-beamer-auto-fragile-frames org-beamer-place-default-actions-for-lists) org-metadown-hook '(org-babel-pop-to-session-maybe) org-export-blocks '((src org-babel-exp-src-block nil) (comment org-export-blocks-format-comment t) (ditaa org-export-blocks-format-ditaa nil) (dot org-export-blocks-format-dot nil)) ) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 6:36 Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] Andras Major @ 2011-08-19 13:33 ` Eric Schulte 2011-08-19 18:52 ` András Major 0 siblings, 1 reply; 12+ messages in thread From: Eric Schulte @ 2011-08-19 13:33 UTC (permalink / raw) To: Andras Major; +Cc: emacs-orgmode Andras Major <andras.g.major@gmail.com> writes: > Hello, here is an example of apparently erroneous behaviour of the > :results switch. In this example, we use an sh block, but it also > appears to affect other languages (will need more investigation). > > Example Org code: > > #+begin_src sh :exports output > echo "Hello World 1" > #+end_src > > #+results: > : Hello World 1 > > #+begin_src sh :exports value > echo "Hello World 2" > #+end_src > > #+results: > : Hello World 2 > > Am I missing something here or should the second instance really > output something like an integer exit value from echo? > Hi András, If we did return the value of shell scripts then ":results value" would almost always simply return 0 (or possibly an error message). For this reason shell code blocks do not implement value returns, but rather will always collect results from STDOUT. Best -- Eric -- Eric Schulte http://cs.unm.edu/~eschulte/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 13:33 ` Eric Schulte @ 2011-08-19 18:52 ` András Major 2011-08-19 19:03 ` Achim Gratz ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: András Major @ 2011-08-19 18:52 UTC (permalink / raw) To: emacs-orgmode Hi Eric, > If we did return the value of shell scripts then ":results value" would > almost always simply return 0 (or possibly an error message). For this > reason shell code blocks do not implement value returns, but rather will > always collect results from STDOUT. I think that this unnecessarily throws away potentially useful functionality. Example: I want to fill a table with data such that the value of a cell depends on whether a file (whose path is specified by another cell, for instance) exists or not. This would be most easily done using an sh block which returns a numeric exit code. I don't see a reason for making clandestine exceptions to the rules in the manual and strongly suggest that the output and value options be honoured for every language. In order not to break existing Org files, I would suggest that the default choice between value and output (when not explicitly specified) depend on the language. With this functionality, sh code blocks that don't specify ":results output" will still work as they did before. András ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 18:52 ` András Major @ 2011-08-19 19:03 ` Achim Gratz 2011-08-19 19:38 ` Sebastien Vauban 2011-08-19 19:20 ` Sebastien Vauban 2011-08-19 22:46 ` Eric Schulte 2 siblings, 1 reply; 12+ messages in thread From: Achim Gratz @ 2011-08-19 19:03 UTC (permalink / raw) To: emacs-orgmode András Major <andras.g.major@gmail.com> writes: > This would be most easily done using an sh block which returns a > numeric exit code. No one keeps you from using echo $? in the last line of that shell block. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Terratec KOMPLEXER: http://Synth.Stromeko.net/Downloads.html#KomplexerWaves ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 19:03 ` Achim Gratz @ 2011-08-19 19:38 ` Sebastien Vauban 0 siblings, 0 replies; 12+ messages in thread From: Sebastien Vauban @ 2011-08-19 19:38 UTC (permalink / raw) To: emacs-orgmode-mXXj517/zsQ Hi Achim, Achim Gratz wrote: > András Major <andras.g.major-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> writes: >> This would be most easily done using an sh block which returns a >> numeric exit code. > > No one keeps you from using > > echo $? > > in the last line of that shell block. Even if this is a smart workaround, it don't think this is equivalent to outputting "value" as, here, you'd get the value printed at the end of the call, but as well all what has been sent to stdout during the execution of the block. Best regards, Seb -- Sebastien Vauban ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 18:52 ` András Major 2011-08-19 19:03 ` Achim Gratz @ 2011-08-19 19:20 ` Sebastien Vauban 2011-08-19 22:46 ` Eric Schulte 2 siblings, 0 replies; 12+ messages in thread From: Sebastien Vauban @ 2011-08-19 19:20 UTC (permalink / raw) To: emacs-orgmode-mXXj517/zsQ Hi András and Eric, András Major wrote: > >> If we did return the value of shell scripts then ":results value" would >> almost always simply return 0 (or possibly an error message). For this >> reason shell code blocks do not implement value returns, but rather will >> always collect results from STDOUT. > > I think that this unnecessarily throws away potentially useful > functionality. Example: I want to fill a table with data such that the value > of a cell depends on whether a file (whose path is specified by another > cell, for instance) exists or not. This would be most easily done using an > sh block which returns a numeric exit code. I don't see a reason for making > clandestine exceptions to the rules in the manual and strongly suggest that > the output and value options be honoured for every language. I must admit that I was not aware of this peculiarity for sh blocks. And I guess there must be a reason for not honoring value vs output here. If not, I'd prefer it to exist -- even if Achim showed that both are always possible. > In order not to break existing Org files, I would suggest that the default > choice between value and output (when not explicitly specified) depend on > the language. With this functionality, sh code blocks that don't specify > ":results output" will still work as they did before. That possibility already exist. It can be done like this: #+begin_src emacs-lisp (add-to-list 'org-babel-default-header-args:sh '((:results . "value"))) #+end_src Best regards, Seb -- Sebastien Vauban ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 18:52 ` András Major 2011-08-19 19:03 ` Achim Gratz 2011-08-19 19:20 ` Sebastien Vauban @ 2011-08-19 22:46 ` Eric Schulte 2011-08-22 21:49 ` Michael Brand 2 siblings, 1 reply; 12+ messages in thread From: Eric Schulte @ 2011-08-19 22:46 UTC (permalink / raw) To: András Major; +Cc: emacs-orgmode András Major <andras.g.major@gmail.com> writes: > Hi Eric, > >> If we did return the value of shell scripts then ":results value" would >> almost always simply return 0 (or possibly an error message). For this >> reason shell code blocks do not implement value returns, but rather will >> always collect results from STDOUT. > > I think that this unnecessarily throws away potentially useful > functionality. Example: I want to fill a table with data such that > the value of a cell depends on whether a file (whose path is specified > by another cell, for instance) exists or not. This would be most > easily done using an sh block which returns a numeric exit code. I > don't see a reason for making clandestine exceptions to the rules in > the manual and strongly suggest that the output and value options be > honoured for every language. > I do see your point, and I agree that consistent behavior between languages is of paramount importance. In fact I began working on implementing the return of error codes from shell code blocks, however I ran into the following issue. For every language, when an error is thrown babel tries to open an error buffer holding the contents of the error message. This is very useful for debugging code which lives inside of a code block -- a process which can otherwise be difficult because of the extra layer of indirection babel interposes between the programmer and the codes execution. In order to return exit codes from shell blocks babel would have to silently ignore errors in shell blocks. I would lean towards thinking that passing along error messages is more important than returning error codes, but if the community thinks differently I'm happy to change the ob-sh behavior. Unfortunately it seems that in either case the sh code blocks will need to be different than other languages either in its handling of errors or of return values. This is unavoidable due to the overloading of return values in the shell as error indicators. > > In order not to break existing Org files, I would suggest that the > default choice between value and output (when not explicitly > specified) depend on the language. With this functionality, sh code > blocks that don't specify ":results output" will still work as they > did before. > I agree, if we go this route this is the way to do it. Best -- Eric > > András > > > -- Eric Schulte http://cs.unm.edu/~eschulte/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-19 22:46 ` Eric Schulte @ 2011-08-22 21:49 ` Michael Brand 2011-08-23 16:18 ` Achim Gratz 2011-08-23 17:13 ` Eric Schulte 0 siblings, 2 replies; 12+ messages in thread From: Michael Brand @ 2011-08-22 21:49 UTC (permalink / raw) To: Eric Schulte Cc: András Major, Sebastien Vauban, Achim Gratz, emacs-orgmode Hi Eric 2011/8/20 Eric Schulte <schulte.eric@gmail.com>: > [...] I would lean towards thinking > that passing along error messages is more important than returning error > codes, but if the community thinks differently I'm happy to change the > ob-sh behavior. A non-zero exit status and stderr of a process are not necessarily related. Because a process may also use - a non-zero exit status without error situation (e. g. grep, diff) - stderr for output not related with errors - stdout for error messages I would like very much to be able to collect all available feedback from a process at the same run. Even with an optional indication of the origin, for ambiguity like the "hello" below or just for clarification. > Unfortunately it seems that in either case the sh code blocks will need > to be different than other languages either in its handling of errors or > of return values. This is unavoidable due to the overloading of return > values in the shell as error indicators. If the shell is a special case for babel anyway, why not something like the following? #+begin_src sh :exports stdout stderr exit_status -v echo hello echo hello >&2 false #+end_src #+results: : 2: hello : 1: hello : exit status: 1 This would have been - with an option -v for verbosity to prefix stdout with "1: ", stderr with "2: " and the exit status - with the exit status of the last command without the need of an extra "echo $?". My habit as a background info: To learn more from the shell I use - a shell prompt with the exit status of the last command - when I sometimes want to visually divide stdout and stderr (bash): { { echo hello; echo hello >&2; } 3>&1 1>&2 2>&3 | sed 's/^/2: /'; } \ 3>&1 1>&2 2>&3 | sed 's/^/1: /'; 3>&- to output: 2: hello 1: hello Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-22 21:49 ` Michael Brand @ 2011-08-23 16:18 ` Achim Gratz 2011-08-23 17:10 ` Eric Schulte 2011-08-23 17:13 ` Eric Schulte 1 sibling, 1 reply; 12+ messages in thread From: Achim Gratz @ 2011-08-23 16:18 UTC (permalink / raw) To: emacs-orgmode Michael Brand <michael.ch.brand@gmail.com> writes: > If the shell is a special case for babel anyway, why not something > like the following? Ehm, no. But I think that it would be generally useful (not just for shell blocks) to be able to capture stderr, either together with stdout or separately into a result target block and have the return status available as a variable (although that does not work for consecutive invocations in a session). Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Factory and User Sound Singles for Waldorf rackAttack: http://Synth.Stromeko.net/Downloads.html#WaldorfSounds ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-23 16:18 ` Achim Gratz @ 2011-08-23 17:10 ` Eric Schulte 0 siblings, 0 replies; 12+ messages in thread From: Eric Schulte @ 2011-08-23 17:10 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: > Michael Brand <michael.ch.brand@gmail.com> writes: >> If the shell is a special case for babel anyway, why not something >> like the following? > > Ehm, no. But I think that it would be generally useful (not just for > shell blocks) to be able to capture stderr, either together with stdout > or separately into a result target block and have the return status > available as a variable (although that does not work for consecutive > invocations in a session). > Hmm, I do think that a ":results stderr" option could be useful, however this would not be a trivial implementation as it may require adjustments to all of the language files. -- Eric Schulte http://cs.unm.edu/~eschulte/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-22 21:49 ` Michael Brand 2011-08-23 16:18 ` Achim Gratz @ 2011-08-23 17:13 ` Eric Schulte 2011-08-29 19:17 ` Michael Brand 1 sibling, 1 reply; 12+ messages in thread From: Eric Schulte @ 2011-08-23 17:13 UTC (permalink / raw) To: Michael Brand Cc: András Major, Sebastien Vauban, Achim Gratz, emacs-orgmode Michael Brand <michael.ch.brand@gmail.com> writes: > Hi Eric > > 2011/8/20 Eric Schulte <schulte.eric@gmail.com>: >> [...] I would lean towards thinking >> that passing along error messages is more important than returning error >> codes, but if the community thinks differently I'm happy to change the >> ob-sh behavior. > > A non-zero exit status and stderr of a process are not necessarily > related. Because a process may also use > - a non-zero exit status without error situation (e. g. grep, diff) > - stderr for output not related with errors > - stdout for error messages > I would like very much to be able to collect all available feedback > from a process at the same run. Even with an optional indication of > the origin, for ambiguity like the "hello" below or just for clarification. > I agree that some mechanism for collecting output from STDERR could be useful, however its implementation would not be trivial. > >> Unfortunately it seems that in either case the sh code blocks will need >> to be different than other languages either in its handling of errors or >> of return values. This is unavoidable due to the overloading of return >> values in the shell as error indicators. > > If the shell is a special case for babel anyway, why not something > like the following? > > #+begin_src sh :exports stdout stderr exit_status -v > echo hello > echo hello >&2 > false > #+end_src > > #+results: > : 2: hello > : 1: hello > : exit status: 1 > > This would have been > - with an option -v for verbosity to prefix > stdout with "1: ", stderr with "2: " and the exit status > - with the exit status of the last command without the need of an > extra "echo $?". > > My habit as a background info: To learn more from the shell I use > - a shell prompt with the exit status of the last command > - when I sometimes want to visually divide stdout and stderr (bash): > { { echo hello; echo hello >&2; } 3>&1 1>&2 2>&3 | sed 's/^/2: /'; } \ > 3>&1 1>&2 2>&3 | sed 's/^/1: /'; 3>&- > to output: > 2: hello > 1: hello > I think that in general mixing the output status with STDOUT would not be a clean solution, as it would require parsing to use. Also, I don't think that the example above would help to bring the behavior of sh code blocks more in-line with other code blocks. Note that during interactive evaluation if the exit status is non-0 then STDERR will be dumped into a babel error buffer which will be poped up, so this information will not be silently discarded. Best -- Eric -- Eric Schulte http://cs.unm.edu/~eschulte/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] 2011-08-23 17:13 ` Eric Schulte @ 2011-08-29 19:17 ` Michael Brand 0 siblings, 0 replies; 12+ messages in thread From: Michael Brand @ 2011-08-29 19:17 UTC (permalink / raw) To: Eric Schulte Cc: András Major, Sebastien Vauban, Achim Gratz, emacs-orgmode Hi Eric On Tue, Aug 23, 2011 at 19:13, Eric Schulte <schulte.eric@gmail.com> wrote: > Note that during interactive evaluation if the exit status is non-0 then > STDERR will be dumped into a babel error buffer which will be poped up, > so this information will not be silently discarded. Thanks for emphasizing this. I didn't use code block evaluation much for ob-sh and haven't yet noticed this rule with the last exit status that seems very important to know. Two things I would like to comment referring to the examples 1) to 5) below: a) _completeness_ of the process output: - When the last exit status is 0, babel silently discards possible important information from stderr, see mainly 1), also 2) to 3). - When the last exit status is >0, babel pops up the "Org-Babel Error Output" and silently discards possible important information from stdout, see 4). b) _decision_ whether the process succeeded or failed: - This is made by discriminating the last exit status 0 or not. But there are even standard processes with an exit status and stderr not simple, see 4) to 5) ("simple": 0 => success and output only on stdout, >0 => failure and output only on stderr). My suggestions for changes (I have understood that this would not be easy to do, babel grew differently): a) _completeness_ of the process output: - When the last exit status is 0: Include stderr in "#+results:" by default. In the minority of use cases where the behavior changes I think this is most of the time an improvement. - When the last exit status is >0 and babel pops up the "Org-Babel Error Output": Include stdout there by default. In the minority of use cases where the behavior changes I think this is always an improvement. b) _decision_ whether the process succeeded or failed: - My point of view is that babel code block evaluation is not always able to make such a decision for two reasons, at least in the case of the languages awk, sh and shell: Firstly not universally because it would require to consider which process it runs, e. g. the exit status 1 means success for diff or grep but >0 means failure for most other processes. Secondly not reliably because it would require to consider for which purpose this process is used during this evaluation. When one wants to document the output of a failure then "Org-Babel Error Output" does not come in handy. - An option to move this decision to the user would help. For this I wish to have an additional and somehow more manual operation mode that bypasses the interpretation of the last exit status and omits "Org-Babel Error Output". Achim already phrased it in this thread as: - "I think that it would be generally useful (not just for shell blocks) to be able to capture stderr, either together with stdout or separately into a result target block and have the return status available as a variable." - I would only add: It would be nice to have both variants of "either or" available to choose from. The first for better human readability and the second to read stdout without stderr into the next chained code block again. ---------------------------------------------------------------- Comments and questions for the examples and workarounds: Examples 4) to 5) end up with an empty "Org-Babel Error Output" and "#+results:" is emptied. - Since they are both empty it is not necessarily clear what happened. - The Messages buffer says "Babel evaluation exited with code 1" and "Code block produced no output.". The second statement is not necessarily clear: - Is this an _info_ or was output expected and this is an _error_ that even stopped babel from doing more work? - Is the message "Code block evaluation complete." from other cases an indication whether babel finished all its work? If this is an indication, isn't this message missing in the following case? #+begin_src sh :results output true #+end_src #+results: - Which "output" was meant to be missing? - Output missing on stdout (example 5) or was stdout not considered due to last exit status >0 (example 4)? - Output missing on stderr? At the end are the workarounds I will use for now for the examples 1) to 5). Shown is the complete variant when I need to know the last exit status. - 2>&1 :: collect stderr - $? :: last exit status - true :: omit any "Org-Babel Error Output" ---------------------------------------------------------------- Examples: 1) command(s) before the last command have error - non-existent file myfile, output mixed on stdout and stderr - in a terminal (not babel code block evaluation): - shell command: #+begin_example ls myfile echo b #+end_example - output (stderr: ls, stdout: echo, exit status ls: 2, exit status echo: 0): #+begin_example ls: myfile: No such file or directory b #+end_example - with babel: #+begin_src sh :results output ls myfile echo b #+end_src #+results: : b 2) strace (Linux) - output on stderr - in a terminal (not babel code block evaluation): - shell command: #+begin_example strace true #+end_example - output (stdout: empty, stderr: syscalls, exit status: 0): #+begin_example execve("/bin/true", ["true"], [/* 54 vars */]) = 0 [...] exit_group(0) = ? #+end_example - with babel: #+begin_src sh :results output strace true #+end_src #+results: 3) truss (Solaris) - output on stderr - in a terminal (not babel code block evaluation): - shell command: #+begin_example truss true #+end_example - output (stdout: empty, stderr: syscalls, exit status: 0): #+begin_example execve("/usr/bin/true", 0xFFBFF0FC, 0xFFBFF104) argc = 1 [...] _exit(0) #+end_example - with babel: #+begin_src sh :results output truss true #+end_src #+results: 4) diff - the exit status as standardized by POSIX/SUS http://pubs.opengroup.org/onlinepubs/009695399/utilities/diff.html - 0 :: No differences were found. - 1 :: Differences were found. - >1 :: An error occurred. - example with two differing files #+begin_src sh :results silent echo a > /tmp/a echo b > /tmp/b #+end_src - in a terminal (not babel code block evaluation): - shell command: #+begin_example diff /tmp/a /tmp/b #+end_example - output (stdout: differences, stderr: empty, exit status: 1): #+begin_example 1c1 < a --- > b #+end_example - with babel: #+begin_src sh :results output diff /tmp/a /tmp/b #+end_src #+results: 5) grep - the exit status as standardized by POSIX/SUS http://pubs.opengroup.org/onlinepubs/009695399/utilities/grep.html - 0 :: One or more lines were selected. - 1 :: No lines were selected. - >1 :: An error occurred. - example: - in a terminal (not babel code block evaluation): - shell command: #+begin_example echo a | grep b #+end_example - output (stdout: empty, stderr: empty, exit status: 1): #+begin_example #+end_example - with babel: #+begin_src sh :results output echo a | grep b #+end_src #+results: ---------------------------------------------------------------- Workarounds: 1) command(s) before the last command have error #+begin_src sh :results output ls myfile 2>&1 echo b 2>&1 echo "last exit status: $?" 2>&1 true 2>&1 #+end_src #+results: : ls: myfile: No such file or directory : b : last exit status: 0 2) strace (Linux) #+begin_src sh :results output strace true b 2>&1 echo "last exit status: $?" 2>&1 true 2>&1 #+end_src #+results: : execve("/bin/true", ["true", "b"], [/* 104 vars */]) = 0 : [...] : exit_group(0) = ? : last exit status: 0 3) truss (Solaris) #+begin_src sh :results output truss true b 2>&1 echo "last exit status: $?" 2>&1 true 2>&1 #+end_src #+results: : execve("/usr/bin/true", 0xFFBFF0FC, 0xFFBFF104) argc = 1 : [...] : _exit(0) : last exit status: 0 4) diff #+begin_src sh :results output diff /tmp/a /tmp/b 2>&1 echo "last exit status: $?" 2>&1 true 2>&1 #+end_src #+results: : 1c1 : < a : --- : > b : last exit status: 1 5) grep #+begin_src sh :results output echo a | grep b 2>&1 echo "last exit status: $?" 2>&1 true 2>&1 #+end_src #+results: : last exit status: 1 ---------------------------------------------------------------- Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-08-29 19:17 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-08-19 6:36 Bug: babel: results switch (output vs. value) has no or wrong effect for sh source block [7.7 (release_7.7.107.g7a82)] Andras Major 2011-08-19 13:33 ` Eric Schulte 2011-08-19 18:52 ` András Major 2011-08-19 19:03 ` Achim Gratz 2011-08-19 19:38 ` Sebastien Vauban 2011-08-19 19:20 ` Sebastien Vauban 2011-08-19 22:46 ` Eric Schulte 2011-08-22 21:49 ` Michael Brand 2011-08-23 16:18 ` Achim Gratz 2011-08-23 17:10 ` Eric Schulte 2011-08-23 17:13 ` Eric Schulte 2011-08-29 19:17 ` Michael Brand
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).