Re: Feature request: PROMPT_COMMANDS array variable

2018-01-23 Thread Daniel Colascione
Sure, but you have a coordination problem. Everyone is going to use a
different array name, and since scripts have no way of knowing in advance
to what array they need to add their function, we end up the same spot.
Putting the array in the core would solve the coordination problem.

On Jan 23, 2018 7:05 PM, "Clark Wang"  wrote:

> On Wed, Jan 24, 2018 at 2:23 AM, Daniel Colascione 
> wrote:
>
>> Right now, PROMPT_COMMAND gives a shell command to run before displaying
>> the prompt. It's common these days to include in one's bash configuration
>> numerous packages from different sources that *all* want to run code at
>> PROMPT_COMMAND time. Can we add a new PROMPT_COMMANDS array variable that
>> stores a list of shell commands to execute? With a PROMPT_COMMANDS
>> variable, different packages can independently add their hooks without
>> stepping on each other.
>>
>
> I would define my own array var and go through it in PROMPT_COMMAND. (My
> PROMPT_COMMAND is just a function name.)
>


Re: Feature request: PROMPT_COMMANDS array variable

2018-01-23 Thread Clark Wang
On Wed, Jan 24, 2018 at 2:23 AM, Daniel Colascione 
wrote:

> Right now, PROMPT_COMMAND gives a shell command to run before displaying
> the prompt. It's common these days to include in one's bash configuration
> numerous packages from different sources that *all* want to run code at
> PROMPT_COMMAND time. Can we add a new PROMPT_COMMANDS array variable that
> stores a list of shell commands to execute? With a PROMPT_COMMANDS
> variable, different packages can independently add their hooks without
> stepping on each other.
>

I would define my own array var and go through it in PROMPT_COMMAND. (My
PROMPT_COMMAND is just a function name.)


Re: Feature request: PROMPT_COMMANDS array variable

2018-01-23 Thread tetsujin

Well, PROMPT_COMMAND does take shell syntax, so if this is just a
question of getting multiple commands in there, you can separate them
with semicolons.

That said, I do think using an array would be nicer (mainly, it's
easier to manipulate the list of commands programmatically) but then
you can't export the variable any more, for instance.

- Original Message -
From: "Daniel Colascione" 
To:
Cc:
Sent:Tue, 23 Jan 2018 10:23:38 -0800
Subject:Feature request: PROMPT_COMMANDS array variable

 Right now, PROMPT_COMMAND gives a shell command to run before
displaying
 the prompt. It's common these days to include in one's bash
configuration
 numerous packages from different sources that *all* want to run code
at
 PROMPT_COMMAND time. Can we add a new PROMPT_COMMANDS array variable
that
 stores a list of shell commands to execute? With a PROMPT_COMMANDS
 variable, different packages can independently add their hooks
without
 stepping on each other.



Feature request: PROMPT_COMMANDS array variable

2018-01-23 Thread Daniel Colascione
Right now, PROMPT_COMMAND gives a shell command to run before displaying
the prompt. It's common these days to include in one's bash configuration
numerous packages from different sources that *all* want to run code at
PROMPT_COMMAND time. Can we add a new PROMPT_COMMANDS array variable that
stores a list of shell commands to execute? With a PROMPT_COMMANDS
variable, different packages can independently add their hooks without
stepping on each other.


Re: coredump from C-c-ed function

2018-01-23 Thread xftroxgpx
 Original Message 
 On January 23, 2018 5:33 PM, Chet Ramey  wrote:

>On 1/23/18 9:57 AM, Chet Ramey wrote:
>>On 1/23/18 8:54 AM, Chet Ramey wrote:
>>>On 1/23/18 3:30 AM, xftroxgpx wrote:
Bash Version: 4.4
 Patch Level: 12
 Release Status: release
Description:
 bash coredumps by interrupting a called a function via C-c

>>>OK, I got it to crash. It has something to do with the command timing.
>> I'll take a look.
>>
>
> This was fixed back in November as a result of
>https://savannah.gnu.org/support/?109403
>
> and the fix is in the devel branch.
>
>The lyf so short, the craft so long to lerne.'' - ChaucerArs longa, vita 
>brevis'' - Hippocrates
> Chet Ramey, UTech, CWRU chet@case.eduhttp://tiswww.cwru.edu/~chet/
>

I can confirm that the issue is completely gone with the bash version from the 
devel branch. Thank you for pointing me to it!
GNU bash, version 4.4.12(1)-maint (x86_64-pc-linux-gnu)
tested latest commit e7e095ceb37ba7649a5d56a008147b379027f6f4

I had no idea that the latest bash(from master) is almost 1 year old:
commit bc007799f0e1362100375bb95d952d28de4c62fb (origin/master, origin/HEAD, 
master)
Date:   Fri Jan 27 11:25:44 2017 -0500

Bash-4.4 patch 12

what I was using: 
https://git.archlinux.org/svntogit/packages.git/log/trunk?h=packages/bash

Cheers! Best wishes!



Re: coredump from C-c-ed function

2018-01-23 Thread Chet Ramey
On 1/23/18 9:57 AM, Chet Ramey wrote:
> On 1/23/18 8:54 AM, Chet Ramey wrote:
>> On 1/23/18 3:30 AM, xftroxgpx wrote:
>>
>>> Bash Version: 4.4
>>> Patch Level: 12
>>> Release Status: release
>>>
>>> Description:
>>> bash coredumps by interrupting a called a function via C-c
> 
> OK, I got it to crash. It has something to do with the command timing.
> I'll take a look.

This was fixed back in November as a result of
https://savannah.gnu.org/support/?109403

and the fix is in the devel branch.
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



Re: coredump from C-c-ed function

2018-01-23 Thread xftroxgpx

​

 Original Message 
 On January 23, 2018 2:54 PM, Chet Ramey  wrote:

>On 1/23/18 3:30 AM, xftroxgpx wrote:
>
>>Bash Version: 4.4
>> Patch Level: 12
>> Release Status: release
>>Description:
>> bash coredumps by interrupting a called a function via C-c
>>Repeat-By:
>>1. get interactive bash shell
>>
>>2. paste this function definition at command prompt
>> function dv3() {
>> local ec=1
>> time while test "$ec" -ne "0"; do
>> sleep 1
>> ls /$RANDOM
>> ec="$?"
>> done
>> }
>>
>>3. now call it: $ dv3
>>
>>4. C-c at any point
>>
>>
> $ ./bash
> $ echo $BASH_VERSION
> 4.4.12(2)-release
> $ function dv3() {
>>local ec=1
>> time while test "$ec" -ne "0"; do
>> sleep 1
>> ls /$RANDOM
>> ec="$?"
>> done
>> }
>>
>$ type dv3
> dv3 is a function
> dv3 ()
> {
> local ec=1;
> time while test "$ec" -ne "0"; do
> sleep 1;
> /bin/ls -F /$RANDOM;
> ec="$?";
> done
> }
> $ dv3
> /bin/ls: cannot access /10692: No such file or directory
> /bin/ls: cannot access /8614: No such file or directory
> /bin/ls: cannot access /22963: No such file or directory
> ^C
>
> real  0m3.189s
> user  0m0.002s
> sys   0m0.008s
> $
>
> (I have an alias for ls.)
Seems like you hit variant B) here.
where you get to see the prompt but there still was a coredump, which looks 
like this on `journalctl -efa --no-hostname`, for me:
$ type dv3
dv3 is a function
dv3 () 
{ 
local ec=1;
time while test "$ec" -ne "0"; do
sleep 1;
ls --color=auto /$RANDOM;
ec="$?";
done
}
$ dv3
ls: cannot access '/10004': No such file or directory
ls: cannot access '/9610': No such file or directory
^C

real0m3.001s
user0m0.001s
sys 0m0.008s
$

#still got prompt
#(in another terminal) partial output of `journalctl -efa --no-hostname` is:
Jan 23 16:19:50 systemd-coredump[2517]: Process 2515 (bash) of user 1000 dumped 
core.

Stack trace of thread 2515:
#0  0x7f3763d7649d _int_malloc (libc.so.6)
#1  0x7f3763d782f3 malloc (libc.so.6)
#2  0x0047224e xmalloc (bash)
#3  0x0042a1c9 make_bare_word (bash)
#4  0x0043c8ed copy_word_list (bash)
#5  0x0043ce3f copy_command (bash)
#6  0x0043ce09 copy_command (bash)
#7  0x0043cf5e n/a (bash)
#8  0x0043cbb1 copy_command (bash)
#9  0x0043cbf9 copy_command (bash)
#10 0x0043cc3a copy_command (bash)
#11 0x00434c01 n/a (bash)
#12 0x004310d9 n/a (bash)
#13 0x00431e4c execute_command_internal (bash)
#14 0x0047894f parse_and_execute (bash)
#15 0x0044dd71 command_substitute (bash)
#16 0x0045285e n/a (bash)
#17 0x00453d11 n/a (bash)
#18 0x00455409 expand_prompt_string (bash)
#19 0x0041dd74 decode_prompt_string (bash)
#20 0x0041e791 n/a (bash)
#21 0x00427c46 yyparse (bash)
#22 0x0041c12f parse_command (bash)
#23 0x0041c218 read_command (bash)
#24 0x0041c3f9 reader_loop (bash)
#25 0x0041b1b5 main (bash)
#26 0x7f3763d16f4a __libc_start_main (libc.so.6)
#27 0x0041b6fa _start (bash)
Jan 23 16:19:50 systemd-coredump[2522]: Process 2520 (bash) of user 1000 dumped 
core.

Stack trace of thread 2520:
#0  0x7f3763d7649d _int_malloc (libc.so.6)
#1  0x7f3763d782f3 malloc (libc.so.6)
#2  0x0047224e xmalloc (bash)
#3  0x0042a1c9 make_bare_word (bash)
#4  0x0043c8ed copy_word_list (bash)
#5  0x0043ce3f copy_command (bash)
#6  0x0043cdf4 copy_command (bash)
#7  0x0043cbf9 copy_command (bash)
#8  0x0043cbe8 copy_command (bash)
#9  0x0043cc3a copy_command (bash)
#10 0x00434c01 n/a (bash)
#11 0x004310d9 n/a (bash)
#12 0x00431e4c execute_command_internal (bash)
#13 0x0047894f parse_and_execute (bash)
#14 0x0044dd71 command_substitute (bash)
#15 0x0045285e n/a (bash)
#16 0x00453d11 n/a (bash)
#17 0x00455409 expand_prompt_string (bash)
#18 0x0041dd74 decode_prompt_string (bash)
#19 0x0041e791 n/a (bash)
#20 0x00427c46 yyparse (bash)
#21 0x0041c12f parse_command (bash)
#22 0x0041c218 read_command (bash)
#23 0x0041c3f9 reader_loop (bash)
#24 0x0041b1b5 main (bash)
#25 0x7f3763d16f4a __libc_start_main (libc.so.6)
#26 0x0041b6fa _start (bash)

#continuing in original terminal, where I still got a prompt
$ echo a
a
$

#still got a prompt
#looking at journalctl again:
Jan 23 16:22:44 systemd-coredump[2726]: Process 2724 (bash) of user 1000 dumped 
core.

Stack trace of thread 2724:
#0  0x7f3763d7649d _int_malloc (libc.so.6)
#1  0x7f3763d782f3 malloc (libc.so.6)
#2  0x0047224e xmalloc (bash)
#3  0x0042a1c9 make_bare_word (bash)
#4  0x0043c8ed copy_word_list (bash)
#5  0x0043ce3f copy_command (bash)
#6  0x0043ce09 copy_command (bash)
#7  0x0043cf5e n/a (bash)
#8  0x0043cbb1 copy_command (bash)
#9  0x0043cbf9 

Re: coredump from C-c-ed function

2018-01-23 Thread Chet Ramey
On 1/23/18 8:54 AM, Chet Ramey wrote:
> On 1/23/18 3:30 AM, xftroxgpx wrote:
> 
>> Bash Version: 4.4
>> Patch Level: 12
>> Release Status: release
>>
>> Description:
>> bash coredumps by interrupting a called a function via C-c

OK, I got it to crash. It has something to do with the command timing.
I'll take a look.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



Re: coredump from C-c-ed function

2018-01-23 Thread Chet Ramey
On 1/23/18 3:30 AM, xftroxgpx wrote:

> Bash Version: 4.4
> Patch Level: 12
> Release Status: release
> 
> Description:
> bash coredumps by interrupting a called a function via C-c
> 
> Repeat-By:
> 1. get interactive bash shell
> 2. paste this function definition at command prompt
> function dv3() {
>   local ec=1
>   time while test "$ec" -ne "0"; do
> sleep 1
> ls /$RANDOM
> ec="$?"
>   done
> }
> 3. now call it: $ dv3
> 4. C-c at any point

$ ./bash
$ echo $BASH_VERSION
4.4.12(2)-release
$ function dv3() {
>   local ec=1
>   time while test "$ec" -ne "0"; do
> sleep 1
> ls /$RANDOM
> ec="$?"
>   done
> }
$ type dv3
dv3 is a function
dv3 ()
{
local ec=1;
time while test "$ec" -ne "0"; do
sleep 1;
/bin/ls -F /$RANDOM;
ec="$?";
done
}
$ dv3
/bin/ls: cannot access /10692: No such file or directory
/bin/ls: cannot access /8614: No such file or directory
/bin/ls: cannot access /22963: No such file or directory
^C

real0m3.189s
user0m0.002s
sys 0m0.008s
$

(I have an alias for ls.)
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



coredump from C-c-ed function

2018-01-23 Thread xftroxgpx

Configuration Information [Automatically generated, do not change]:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-unknown-linux-gnu' 
-DCONF_VENDOR='unknown' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' 
-DSHELL -DHAVE_CONFIG_H   -I.  -I. -I./include -I./lib  -D_FORTIFY_SOURCE=2 
-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong 
-DDEFAULT_PATH_VALUE='/usr/local/sbin:/usr/local/bin:/usr/bin' 
-DSTANDARD_UTILS_PATH='/usr/bin' -DSYS_BASHRC='/etc/bash.bashrc' 
-DSYS_BASH_LOGOUT='/etc/bash.bash_logout' -DNON_INTERACTIVE_LOGIN_SHELLS 
-Wno-parentheses -Wno-format-security
uname output: Linux z5 4.15.0-rc9-g0c5b9b5d9adb #177 SMP PREEMPT Mon Jan 22 
09:51:52 CET 2018 x86_64 GNU/Linux
Machine Type: x86_64-unknown-linux-gnu

Bash Version: 4.4
Patch Level: 12
Release Status: release

Description:
bash coredumps by interrupting a called a function via C-c

Repeat-By:
1. get interactive bash shell
2. paste this function definition at command prompt
function dv3() {
  local ec=1
  time while test "$ec" -ne "0"; do
sleep 1
ls /$RANDOM
ec="$?"
  done
}
3. now call it: $ dv3
4. C-c at any point

two things can happen:
A) coredump and immediate exit (also command history is not saved)
B) (coredump?(unsure) and) you still have the bash prompt but the next dv3 
command will do A.

Stacktraces sample:
Jan 23 09:16:53 systemd-coredump[12705]: Process 12703 (bash) of user 1000 
dumped core.

Stack trace of thread 12703:
#0  0x7f624c8ff3dc _int_malloc (libc.so.6)
#1  0x7f624c9012f3 malloc (libc.so.6)
#2  0x0047224e xmalloc (bash)
#3  0x0045eb2b array_create (bash)
#4  0x0045eb71 array_copy (bash)
#5  0x00459e86 run_exit_trap (bash)
#6  0x0045c7c9 n/a (bash)
#7  0x0045c911 termsig_sighandler (bash)
#8  0x7f624c8b38e0 __restore_rt (libc.so.6)
#9  0x7f624c8ff49d _int_malloc (libc.so.6)
#10 0x7f624c9012f3 malloc (libc.so.6)
#11 0x0047224e xmalloc (bash)
#12 0x0042a1c9 make_bare_word (bash)
#13 0x0043c8ed copy_word_list (bash)
#14 0x0043ce3f copy_command (bash)
#15 0x0043ce09 copy_command (bash)
#16 0x0043cf5e n/a (bash)
#17 0x0043cbb1 copy_command (bash)
#18 0x0043cbf9 copy_command (bash)
#19 0x0043cc3a copy_command (bash)
#20 0x00434c01 n/a (bash)
#21 0x004310d9 n/a (bash)
#22 0x00431e4c execute_command_internal (bash)
#23 0x0047894f parse_and_execute (bash)
#24 0x0044dd71 command_substitute (bash)
#25 0x0045285e n/a (bash)
#26 0x00453d11 n/a (bash)
#27 0x00455409 expand_prompt_string (bash)
#28 0x0041dd74 decode_prompt_string (bash)
#29 0x0041e791 n/a (bash)
#30 0x00427c46 yyparse (bash)
#31 0x0041c12f parse_command (bash)
#32 0x0041c218 read_command (bash)
#33 0x0041c3f9 reader_loop (bash)
#34 0x0041b1b5 main (bash)
#35 0x7f624c89ff4a __libc_start_main (libc.so.6)
#36 0x0041b6fa _start (bash)
Jan 23 09:16:53 systemd-coredump[12710]: Process 12708 (bash) of user 1000 
dumped core.

Stack trace of thread 12708:
#0  0x7f624c8ff3dc _int_malloc (libc.so.6)
#1  0x7f624c9012f3 malloc (libc.so.6)
#2  0x0047224e xmalloc (bash)
#3  0x0045ead4 array_create_element (bash)
#4  0x0045eb4d array_create (bash)
#5  0x0045eb71 array_copy (bash)
#6  0x00459e86 run_exit_trap (bash)
#7  0x0045c7c9 n/a (bash)
#8  0x0045c911 termsig_sighandler (bash)
#9  0x7f624c8b38e0 __restore_rt (libc.so.6)
#10 0x7f624c8ff49d _int_malloc (libc.so.6)
#11 0x7f624c9012f3 malloc (libc.so.6)
#12 0x0047224e xmalloc (bash)
#13 0x0042a1c9 make_bare_word (bash)
#14 0x0043c8ed copy_word_list (bash)
#15 0x0043ce3f copy_command (bash)
#16 0x0043cdf4 copy_command (bash)
#17 0x0043cbf9 copy_command (bash)
#18 0x0043cbe8 copy_command (bash)
#19 0x0043cc3a copy_command (bash)
#20 0x00434c01 n/a (bash)
#21 0x004310d9 n/a (bash)
#22 0x00431e4c execute_command_internal (bash)
#23 0x0047894f parse_and_execute (bash)
#24 0x0044dd71 command_substitute (bash)
#25 0x0045285e n/a (bash)
#26 0x00453d11 n/a (bash)
#27 0x00455409 expand_prompt_string (bash)
#28 0x0041dd74 decode_prompt_string (bash)
#29 0x0041e791 n/a (bash)
#30 0x00427c46 yyparse (bash)
#31 0x0041c12f parse_command (bash)
#32 0x0041c218 read_command (bash)
#33 0x0041c3f9 reader_loop (bash)
#34 0x0041b1b5 main (bash)
#35 0x7f624c89ff4a __libc_start_main (libc.so.6)
#36 0x0041b6fa _start (bash)
Jan 23 09:16:56 login[12085]: pam_unix(login:session): session closed for user 
xftroxgpx
Jan 23 09:16:56 systemd-coredump[12773]: Process 12138 (bash) of user