Re: Feature request: PROMPT_COMMANDS array variable
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
On Wed, Jan 24, 2018 at 2:23 AM, Daniel Colascionewrote: > 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
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
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
Original Message On January 23, 2018 5:33 PM, Chet Rameywrote: >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
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
Original Message On January 23, 2018 2:54 PM, Chet Rameywrote: >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
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
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
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