diff options
author | Profpatsch <mail@profpatsch.de> | 2021-07-27 12:05:49 +0200 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-07-27 12:10:13 +0200 |
commit | 5a616c02b1b419eaeae0b608ec2a3c2398eec42f (patch) | |
tree | 1a4cc6f5b775f63b2bfa9de84cc7cc4ed6b0e0b8 /pkgs/profpatsch/execline/e.nix | |
parent | a2ad923b121f54c2fd7bcbc0109c4bcf615259c8 (diff) |
pkgs/profpatsch/e: fix by rewriting in rust and execing into block
calling `execlineb -c` has unfortunate quoting issues, cause for cornercases like arguments that contain spaces or `"` the result would be a completely broken command line. Instead, let’s do our own block construction in a small rust program (for speed). I tried implementing it in bash first but even prepending spaces to a string is a complete waste of time in that language.
Diffstat (limited to 'pkgs/profpatsch/execline/e.nix')
-rw-r--r-- | pkgs/profpatsch/execline/e.nix | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/pkgs/profpatsch/execline/e.nix b/pkgs/profpatsch/execline/e.nix index 90b235a4..4c569bcd 100644 --- a/pkgs/profpatsch/execline/e.nix +++ b/pkgs/profpatsch/execline/e.nix @@ -1,4 +1,4 @@ -{ writeExecline, getBins, pkgs }: +{ writeExecline, getBins, pkgs, writeRustSimple }: let bins = getBins pkgs.rlwrap [ "rlwrap" ] @@ -28,20 +28,10 @@ let if [ $# -eq 0 ]; then ${shell} else - cmd= - # substitute "[" and "]" to execline’s "{" and "}" - for arg in "$@"; do - if [ "$arg" = "[" ]; then - cmd="$cmd {" - else if [ "$arg" = "]" ]; then - cmd="$cmd }" - else - cmd="$cmd $arg" - fi; fi - done - # call execlineb with the arguments as script - ${bins.execlineb} -Pc "$cmd" + export EXECLINE_STRICT=2 + ${run-cmd-line-block} "$@" fi ''; + run-cmd-line-block = writeRustSimple "run-cmd-line-block" {} ./run-cmd-line-block.rs; in { inherit e; } |