The shell quoting rabbithole goes pretty deep, especially when you want to preserve the whitespace within arguments. Has this been solved generally yet? I suspect it requires full knowledge of whatever shell is running on the other side of SSH.
Zsh-autoquoter makes shell quoting slightly less annoying
11–20 of 27 posts
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#12I am still afraid to switch from Bash to Zsh, because these are things I don't fully understand and will find it hard to debug if _something_ breaks. Is something like this available for bash?
POSIX shells do not support arrays, and many other common bash extensions. However, dash is very small, and very fast (4x faster than bash according to some sources).
Scripts written for the POSIX shell are maximally-portable.
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#13One of the nice things about fish is that it does this when pasting: https://github.com/fish-shell/fish-shell/issues/967
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#14The shell quoting rabbithole goes pretty deep, especially when you want to preserve the whitespace within arguments. Has this been solved generally yet? I suspect it requires full knowledge of whatever shell is running on the other side of SSH.
Just thinking of one of OP's examples, his (very cool) autoquoter allows him to type: > ssh user@host awk '{print $1}' file.txt And have the "$1" quoted or escaped so that it's interpreted as an awk keyword on the remote system. But what if I actually want it interpreted as a shell variable that should be expanded on the local or remote system? How does it know? Why is shell quoting still so hard?
So you could get the "treat it as a shell variable on the remote server" behavior by writing this instead:
ssh user@host awk "{print $1}" file.txt
But there's no way, using zsh-autoquoter, to say "yeah but this particular part of the string should not be escaped; let my local shell handle it."Re: Zsh-autoquoter makes shell quoting slightly less annoying
#15I am still afraid to switch from Bash to Zsh, because these are things I don't fully understand and will find it hard to debug if _something_ breaks. Is something like this available for bash?
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#16One of the nice things about fish is that it does this when pasting: https://github.com/fish-shell/fish-shell/issues/967
See https://github.com/zsh-users/zsh/blob/master/Functions/Zle/b... or https://github.com/zsh-users/zsh/blob/master/Functions/Zle/b...
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#17 emulate -L zsh
if [[ "$REGION_ACTIVE" -eq 0 ]]; then
return
fi
if [[ "$MARK" -le "$CURSOR" ]]; then
left_region_bound="$MARK"
right_region_bound="$CURSOR"
else
left_region_bound="$CURSOR"
right_region_bound="$MARK"
fi
length_region="$((right_region_bound - left_region_bound))"
before_region="${BUFFER:0:$left_region_bound}"
region="${BUFFER:$left_region_bound:$length_region}"
after_region="${BUFFER:$right_region_bound}"
quoted_region="${(qqq)region}"
cursor_offset="$(($#quoted_region - $#region))"
BUFFER="$before_region$quoted_region$after_region"
CURSOR="$((CURSOR + cursor_offset))"
REGION_ACTIVE=0
bind with eg zle -N double-quote-region
bindkey '\e"' double-quote-regionRe: Zsh-autoquoter makes shell quoting slightly less annoying
#18The shell quoting rabbithole goes pretty deep, especially when you want to preserve the whitespace within arguments. Has this been solved generally yet? I suspect it requires full knowledge of whatever shell is running on the other side of SSH.
Just thinking of one of OP's examples, his (very cool) autoquoter allows him to type: > ssh user@host awk '{print $1}' file.txt And have the "$1" quoted or escaped so that it's interpreted as an awk keyword on the remote system. But what if I actually want it interpreted as a shell variable that should be expanded on the local or remote system? How does it know? Why is shell quoting still so hard?
The problem with the awk example here specifically is that you're mixing two different languages (shell and awk), and that's always going to be painful to a degree. Doing something like running Python code directly from a Ruby script also isn't fun, especially not if you want Python variables in that Ruby script.
And to make it extra fun in the ssh you're also adding a second shell (on the system you're sshing to), so you have to think about 1) your machine's shell, 2) the host's shell, and 3) awk.
So yeah ... that's going to be tricky, but in this case it's not really a shell problem as such.
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#19Earlier quoted context omitted.
It's puzzling to me that people still think of zsh as "that newfangled shell I'm not sure about yet". Bash came out in 1989. Zsh came out in 1990.
i use zsh, but i often invoke bash just to make sure some behavior is "normal" rather than zsh-specific, or specific to how i wrote my .zshrc last decade [and haven't changed]. i don't think it's about the newfangledness; i think it's about the potential for subtle differences in syntax which scare people away from zsh.
The fish shell "fixed" a lot of that by adding more or less the same feature-set as zsh but without the extensive configurability, which is a really great trade-off if the fish defaults work well for you (they don't for me personally though).
Re: Zsh-autoquoter makes shell quoting slightly less annoying
#20One of the nice things about fish is that it does this when pasting: https://github.com/fish-shell/fish-shell/issues/967
0: assuming you've seen a url like http://example.com/foo?bar=1&baz=2 before