Another "set" option?

2013-07-10 Thread Bruce Korb
This seems like a lot of obtuse bother:

xtrace_setting=$(
   re=$'\nxtrace[ \t]+on'
   [[ $(set -o) =~ $re ]] && echo ' -x' || echo ' +x')

if there were only some magic like ${BASH_SETTING_XTRACE} or
xtrace_setting=$(set -q xtrace) or something.  Could we get
something fairly straight forward for querying set/shopt state?
Thank you for considering.  Regards, Bruce



Re: Another "set" option?

2013-07-10 Thread Geir Hauge
2013/7/10 Bruce Korb 

> This seems like a lot of obtuse bother:
>
> xtrace_setting=$(
>re=$'\nxtrace[ \t]+on'
>[[ $(set -o) =~ $re ]] && echo ' -x' || echo ' +x')
>
> if there were only some magic like ${BASH_SETTING_XTRACE} or
> xtrace_setting=$(set -q xtrace) or something.  Could we get
> something fairly straight forward for querying set/shopt state?
> Thank you for considering.  Regards, Bruce
>

shopt -qo xtrace && xtrace=1




-- 
Geir Hauge


History file clobbered by multiple simultaneous exits

2013-07-10 Thread geoff
Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc -I/home/abuild/rpmbuild/BUILD/bash-4.2 
-L/home/abuild/rpmbuild/BUILD/bash-4.2/../readline-6.2
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-suse-linux-gnu' 
-DCONF_VENDOR='suse' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL 
-DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib   -fmessage-length=0 -O2 -Wall 
-D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables 
-fasynchronous-unwind-tables -g  -D_GNU_SOURCE -DRECYCLES_PIDS -Wall -g 
-std=gnu89 -Wuninitialized -Wextra -Wno-unprototyped-calls -Wno-switch-enum 
-Wno-unused-variable -Wno-unused-parameter -ftree-loop-linear -pipe 
-fprofile-use
uname output: Linux bow 3.7.10-1.16-desktop #1 SMP PREEMPT Fri May 31 20:21:23 
UTC 2013 (97c14ba) x86_64 x86_64 x86_64 GNU/Linux
Machine Type: x86_64-suse-linux-gnu

Bash Version: 4.2
Patch Level: 42
Release Status: release

Description:
When the history file is written, no locking is used.  The
result is that when multiple bash instances exit (nearly)
simultaneously, the history file can be replaced by a
zero-length file.

Repeat-By:
Because it's a race condition, the problem can't be reliably
reproduced.  The way I stumble across it is to create multiple
bash sessions 6 or more in a number of terminal windows, each
with HISTFILE set and histappend unset, and then shut the X
server down.  I imagine that you could also create multiple
shells and then kill them all simultaneously.

Fix:
Locking should be used when truncating and writing the history
file.  (Yes, I know it's a pain in a portable program like
bash.)

Strictly speaking, locking is only half a solution, because
the net result will be that the saved history is taken from
a randomly chosen one of the multiple exiting shells.  But
that's better than the current situation where all history is lost.

What might be cooler would be to merge all the history lines
from all shells, in timestamp order.  But given the current
history file format, that seems...hard.