From: Max Nikulin <manikulin@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline
Date: Tue, 23 Apr 2024 17:51:30 +0700 [thread overview]
Message-ID: <v083rk$llm$1@ciao.gmane.io> (raw)
In-Reply-To: <18f01342a2f.124ad27612732529.8693431365849276517@excalamus.com>
On 21/04/2024 22:09, Matt wrote:
> The proposed solution assumes we intend to parse the characters
> following :cmdline as space delimited and grouped by quotes. However,
> AFAICT, the parsing issue makes this solution ambiguous.
Matt, I am sorry, but I do not agree with your proposal. I do not think
that `split-string-and-unquote' will solve all issues.
Certainly issues with formatting of output should be treated separately.
I figured out there is at least one more issue. Consider
#+property: header-args:bash :results verbatim
#+begin_src bash :cmdline $LANG :shebang #!/bin/bash
printf '"%s" ' "$0" "$@"
printf '\n'
tr '\000' '\n' </proc/$$/cmdline
#+end_src
#+RESULTS:
: "/tmp/babel-Is56Ki/sh-script-8FluOx" "$LANG"
: /bin/bash
: /tmp/babel-Is56Ki/sh-script-8FluOx
: $LANG
#+begin_src bash :cmdline $LANG
printf '"%s" ' "$0" "$@"
printf '\n'
tr '\000' '\n' </proc/$$/cmdline
#+end_src
#+RESULTS:
: "/tmp/babel-Is56Ki/sh-script-g0cQ7R" "en_GB.UTF-8"
: /usr/bin/bash
: -c
: /tmp/babel-Is56Ki/sh-script-g0cQ7R $LANG
First line is argv as it is represented for a script, next lines are
exec arguments at lower level (actual executable may be obtained from
"readlink /proc/$$/exe")
Notice that in the former case "$LANG" is passed literally, but in the
latter it is expanded. I am in favor of dropping `shell-command-switch'
in the latter case to pass arguments literally in both cases.
I think, it would be more consistent with :var to specify multiple
arguments using elisp lists
#+header: :cmdline '("first 1" "second 2")
However looking wider, I do not like that :cmdline for ob-shell has
different meaning than for other languages, see e.g. ob-sql. Only for
shell this parameter is treated as arguments of a *script*. In other
cases :cmdline is used to specify arguments of *interpreter* and I think
ob-shell should follow this convention.
Actually script arguments (and :stdin) might be applied to python and at
least some other languages, so support of this feature should be moved
from ob-shell to common org-babel code.
My point:
- header arguments should have as close as possible meaning across
various languages.
- withing ob-shell variation of ways to execute a script should be
minimized either some parameters (:cmdline, :shebang, :stdin) are
specified or not.
Finally a note on tests
> +(ert-deftest test-cmdline-alone-and-with-shebang-have-same-result ()
> + "Pass arguments to a block. Don't use shebang. Then use
> +shebang set to the same language as the block. The result should
> +be the same."
> + (should (equal
> + (org-test-with-temp-text
> + "#+begin_src bash :cmdline 1 2 3
> +echo \"$1\"
> +<point>
> +#+end_src"
> + (org-babel-execute-src-block))
> + (org-test-with-temp-text
> + "#+begin_src bash :cmdline 1 2 3 :shebang #!/usr/bin/env bash
> +echo \"$1\"
> +<point>
> +#+end_src"
> + (org-babel-execute-src-block)))))
I believe, that starting point of the discussion is that the results
should be same and decision what is more correct is the result of the
discussion. Unit tests should check both cases independently and should
fix particular treatment of arguments.
next prev parent reply other threads:[~2024-04-23 10:52 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-18 15:54 [BUG] ob-shell: :shebang changes interpretation of :cmdline Max Nikulin
2023-11-18 18:09 ` Matt
2023-12-04 13:58 ` Ihor Radchenko
2023-12-04 20:41 ` Matt
2023-11-18 18:20 ` [BUG] ob-shell: :cmdline fails with single argument (was Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline) Matt
2023-11-19 6:57 ` Max Nikulin
2023-11-19 7:57 ` Matt
2024-04-21 15:09 ` [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline Matt
2024-04-23 10:28 ` Ihor Radchenko
2024-04-24 10:33 ` Max Nikulin
2024-04-24 12:52 ` Ihor Radchenko
2024-04-25 10:06 ` Max Nikulin
2024-04-26 11:49 ` Ihor Radchenko
2024-04-27 10:31 ` Max Nikulin
2024-04-27 13:37 ` Max Nikulin
2024-04-28 12:34 ` Ihor Radchenko
2024-06-27 12:47 ` Ihor Radchenko
2024-06-27 13:00 ` [BUG] ob-shell may use /bin/sh instead of the specified shell when :cmdline is provided (was: [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline) Ihor Radchenko
2024-06-27 13:08 ` Ihor Radchenko
2024-04-23 10:51 ` Max Nikulin [this message]
2024-04-23 17:08 ` [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline Max Nikulin
2024-04-26 13:09 ` [DISCUSSION] The meaning of :cmdline header argument across babel backends (was: [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline) Ihor Radchenko
2024-04-27 10:53 ` [DISCUSSION] The meaning of :cmdline header argument across babel backends Max Nikulin
2024-04-29 13:33 ` Ihor Radchenko
2024-05-01 17:48 ` Matt
2024-05-01 18:01 ` Ihor Radchenko
2024-05-02 18:50 ` Matt
2024-05-03 12:12 ` Ihor Radchenko
2024-05-20 18:01 ` Matt
2024-05-21 10:28 ` Max Nikulin
2024-05-21 11:34 ` Ihor Radchenko
2024-06-27 14:57 ` Ihor Radchenko
2024-04-26 13:12 ` [PATCH] Re: [BUG] ob-shell: :shebang changes interpretation of :cmdline Ihor Radchenko
2024-04-27 7:43 ` Matt
2024-04-27 7:48 ` Ihor Radchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='v083rk$llm$1@ciao.gmane.io' \
--to=manikulin@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).