From 10cc67f7c25991ec2aca2044a9e18e90001d7a1a Mon Sep 17 00:00:00 2001 From: David Larsson Date: Fri, 12 Nov 2021 13:42:41 +0100 Subject: [PATCH 2/2] gnu: guile-bash: Add patch that fixes reading args. This patch allows guile-bash defined bash-functions to read newline- or null-separated arguments from stdin, making it usable in bash pipelines. It also fixes a bug with arguments containing whitespace not being properly passed to the corresponding guile function. * gnu/packages/guile-xyz (guile-bash)[patches]: add patch. * gnu/packages/patches/guile-bash-args-from-stdin.patch: new file. --- gnu/packages/guile-xyz.scm | 1 + .../patches/guile-bash-args-from-stdin.patch | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 gnu/packages/patches/guile-bash-args-from-stdin.patch diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index 1d35c41796..511d766a6f 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -419,6 +419,7 @@ dictionary and suggesting spelling corrections.") (uri (git-reference (commit commit) (url home-page))) + (patches (search-patches "guile-bash-args-from-stdin.patch")) (sha256 (base32 "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p")) diff --git a/gnu/packages/patches/guile-bash-args-from-stdin.patch b/gnu/packages/patches/guile-bash-args-from-stdin.patch new file mode 100644 index 0000000000..ad42616c70 --- /dev/null +++ b/gnu/packages/patches/guile-bash-args-from-stdin.patch @@ -0,0 +1,42 @@ +From a124921666a16cb4e93f59a653f98b99c78eb2ca Mon Sep 17 00:00:00 2001 +From: David Larsson +Date: Thu, 11 Nov 2021 14:07:04 +0100 +Subject: [PATCH] Enable reading arguments from bash via stdin + +* lisp/gnu/bash.scm(define-bash-function): read from stdin +to SCM_ARGS array when it is open, and separate args by null +instead of newline if -z option is passed as $1. +--- + lisp/gnu/bash.scm | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/lisp/gnu/bash.scm b/lisp/gnu/bash.scm +index 199ebc0..e9dcea5 100644 +--- a/lisp/gnu/bash.scm ++++ b/lisp/gnu/bash.scm +@@ -326,10 +326,18 @@ + (hashq-set! *funcs* symbol thunk) + (unsafe-format/eval + "function ~a { +- SCM_ARGS=($@) ; +- local retval=$~a ; +- unset SCM_ARGS ; +- return $retval ; ++ local -a Input SCM_ARGS ; ++ [[ ! -t 0 ]] && mapfile -d '' Input ; ++ if [[ -n \"${Input[@]}\" ]]; then ++ if [[ \"$1\" == -z ]]; then ++ local -a SCM_ARGS=\"(${Input[*]@Q})\" ; ++ else ++ mapfile -t SCM_ARGS < <(printf '%s' \"${Input[@]}\"); fi ; ++ else ++ SCM_ARGS=(\"$@\"); fi ; ++ local retval=$~a ; ++ unset SCM_ARGS ; ++ return $retval ; + }" + symbol special-varname)))) + +-- +2.31.0 + -- 2.31.0