[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Troublesome checkwinsize (none) behaviour
From: |
Linda Walsh |
Subject: |
Re: Troublesome checkwinsize (none) behaviour |
Date: |
Sat, 13 Jul 2013 02:52:07 -0700 |
User-agent: |
Thunderbird |
werner@suse.de wrote:
Description:
As subject says:
* If checkwinsize is _not_ set the bash does not update the
internal LINES and COLUMNS varaible during a command/job is
running in foreground on same terminal.
---
Right.
* If checkwinsize is set bash/libreadline does export LINES and
COLUMNS breaking ncurses/TIOCGWINSZ based commands/jobs.
Wrong.
Bash doesn't export them:
I have checkwin on:
shopt|grep checkwin
checkwinsize on
But neither ROWS nor COLUMNS are set in the env:
printenv|grep -P 'ROWS|COL'
LS_COLORS=
LC_COLLATE=C
COLORTERM=1
declare -i w=COLUMNS/2;
Note -- "/etc/rc.status on Opensuse *does* export COLUMNS for all processes.
It also sets up it's own signal handler which re-exports them on any
window change:
# Seek for terminal size and, if needed, set default size
rc_lc () {
if test -n "$REDIRECT" ; then
set -- $(stty size < "$REDIRECT" 2> /dev/null || echo 0 0)
else
set -- $(stty size 2> /dev/null || echo 0 0)
fi
LINES=$1
COLUMNS=$2
test $LINES -eq 0 && LINES=24
test $COLUMNS -eq 0 && COLUMNS=80
export LINES COLUMNS
}
trap 'rc_lc' SIGWINCH
rc_lc
----
I ran into the above when writing scripts because COLS/LINES would often be
undefined, so I had to protect many of my start scripts:
B4ops="${-//[^eu]/}" ; set +e +u # turn off strict fails
. /etc/rc.status #safely include rc.status
[[ $B4ops ]] && set -$B4ops
It would seem any process launched by init would have at least
COLUMNS in it's environment unless the ENV had been explicitly cleared --
and I know for interactive sessions, it is not.
As I found startup functions that dirtied the namespace with names like:
path ()
{
command -p ${1+"$@"}
}
---
Not even putting an underscore in front or back of it. 'path' is a
not an uncommon name for shell scripts to use.
Also, I assume you know that suse scripts export COLUMNS in places
like /etc/profile, /etc/csh.login and /etc/ksh.kshrc...
Perhaps one of those is propagating to the error cases mentioned?