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" }