Linda Walsh <b...@tlinx.org> wrote:
> 
> I have a small function in my bashrc:
> 
> function showsize () {\
>   local s=$(stty size); local o="(${s% *}x${s#* })"; s="${#o}";\
>   echo -n $o; while ((s-- > 0));do echo -ne "\b"; done; \
> }
> export -f showsize
> trap showsize SIGWINCH
> ---
> That has the effect of showing me my current window size
> when I resize it.
> 
> The odd thing is, if I use it while at a bash input prompt --
> any command I type has the first word ignored.

Ignored or executed as a separate command?

Using bash 4.2.45, "echo ls /" is treated as "echo ; ls /" although
as you've noticed the command appears in the history as-typed.

> 
> so if I type:
>> echo cmd
> 
> If 'cmd' is not a typo you can use command-not-found to lookup the
> package that contains it, like this:
>     cnf cmd
> ---
> But then I re-edit the line (in vi-mode, ESC-k, it shows me I typed
> echo cmd -- and, indeed, if I hit return, it echo's the word 'cmd'
> w/no error.
> 
> So how can my showsize function be mangling the input in a way that
> prevents proper execution, but isn't recorded by bash?

Trial and error suggests it's something to do with new-style command
substitution.  Try backticks:

    local s=`stty size`

> 
> (this has been one of those things that's bothered me for years, but
> never been important enough to even ask about... I thought I'd look at it
> to fix it, but still don't see why it does what it does).
> 
> Any clues?

showsize()
{
  local o="(${LINES}x${COLUMNS})" ; local s="${o//?/\\b}" ; printf "$o$s"
}



Reply via email to