diff options
Diffstat (limited to 'Src/builtin.c')
-rw-r--r-- | Src/builtin.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index 09034c514..69d78c926 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -4978,13 +4978,14 @@ bin_trap(char *name, char **argv, UNUSED(Options ops), UNUSED(int func)) shfunctab->printnode(hn, 0); DPUTS(!hn, "BUG: I did not find any trap functions!"); } else if (sigtrapped[sig]) { + char *name = getsigname(sig); if (!siglists[sig]) - printf("trap -- '' %s\n", sigs[sig]); + printf("trap -- '' %s\n", name); else { s = getpermtext(siglists[sig], NULL); printf("trap -- "); quotedzputs(s, stdout); - printf(" %s\n", sigs[sig]); + printf(" %s\n", name); zsfree(s); } } @@ -5017,14 +5018,25 @@ bin_trap(char *name, char **argv, UNUSED(Options ops), UNUSED(int func)) /* set traps */ for (; *argv; argv++) { Eprog t; + int flags; sig = getsignum(*argv); if (sig == -1) { zwarnnam(name, "undefined signal: %s", *argv, 0); break; } + if (!strcmp(sigs[sig], *argv)) + flags = 0; + else { + /* + * Record that the signal is used under an assumed name. + * If we ever have more than one alias per signal this + * will need improving. + */ + flags = ZSIG_ALIAS; + } t = dupeprog(prog, 0); - if (settrap(sig, t, 0)) + if (settrap(sig, t, flags)) freeeprog(t); } return *argv != NULL; |