Re: CR/LF
On Sat, 2022-12-10 at 23:44 -0500, Greg Wooledge wrote:
> On Sat, Dec 10, 2022 at 11:16:12PM -0500, Jim Popovitch wrote:
> > On Sat, 2022-12-10 at 22:10 -0500, Greg Wooledge wrote:
> > > On Sat, Dec 10, 2022 at 10:07:48PM -0500, Jim Popovitch wrote:
>
> > > > > > Why does this produce a CR/LF
>
> > > There is still no CR. At all. Ever. This is not Microsoft Windows.
> >
> > Why would you assume Windows is involved? This is about running cmds
> > from Debian 11 to Debian 11.
>
> Then there is no CR/LF. There is only LF.
>
> > > So... what are you actually trying to do?
> >
> > Run cmds on a remote system, that is captured locally in a variable,
> > where said cmds may or may not produce output.
>
> OK. You have a few choices:
>
> 1) Throw away the notion that you can store the output in a variable, and
> store it in a file instead. This is the simplest and safest thing to
> do. If the command produces binary data (including NUL bytes), it's
> not possible to store it directly in a shell variable. But it can
> always be stored in a file.
>
> Redirection to a file also dodges all the insane issues of data
> modification that you get with the other choices.
>
> 2) Use a command substitution. This has two issues:
>
> a) It cannot handle binary data -- only text.
> b) All trailing newlines will be stripped by the command substitution.
>
> If you're certain the output will be text, but you need to preserve
> the correct number of newlines in the output, then the standard
> workaround is to append a fixed character to the stream, and remove
> it afterward:
>
> myvar=$(ssh whatever; printf x)
> myvar=${myvar%x}
>
> That preserves the output stream in its original form.
>
> 3) Pipe the command through something like base64, and use a command
> substitution to store the base64 encoded data stream in the shell
> variable.
>
> Then use base64 -d (or whatever inverts your choice of encoding) when
> you need to use the data.
>
Thanks, all of that is very informative and certainly nothing like the
rants and ravings of a senile old man. :)
> > Taking $() out of the equation doesn't change the result. The following
> > will add a CR/LF:
>
> THERE IS NO CR!
>
> > TEST=`ssh -o LogLevel=QUIET -t user@server "echo -n ''"`; echo ${TEST}
>
> COMMAND SUBSTITUTION REMOVES ALL TRAILING NEWLINES.
>
> IT DOES NOT MATTER WHETHER YOU USE THE MODERN $() OR THE ANCIENT AND
> DEPRECATED BACKTICKS.
>
> YOU ARE **STILL** FAILING TO QUOTE CORRECTLY!
>
> YOU ARE **STILL** USING echo WHICH ADDS A NEWLINE AND THEN WONDERING WHY
> A NEWLINE IS ADDED.
>
> .... I'm done. Continuing the self-abuse of attempting to help you
> is going to be pointless, so please read the answers you've already
> been given. I won't give you any more.
>
welp.
Hope you have a good day tomorrow,
-Jim P.
Reply to:
- References:
- CR/LF
- From: Jim Popovitch <jim@k4vqc.com>
- Re: CR/LF
- From: David Wright <deblis@lionunicorn.co.uk>
- Re: CR/LF
- From: Jim Popovitch <jim@k4vqc.com>
- Re: CR/LF
- From: Greg Wooledge <greg@wooledge.org>
- Re: CR/LF
- From: Jim Popovitch <jim@k4vqc.com>
- Re: CR/LF
- From: Greg Wooledge <greg@wooledge.org>