1 votos

el comando trap -p o -l no produce nada

Cuando corro which trap , da salida a la orden incorporada en el shell.

$ which trap
trap: shell built-in command

Según el manual :

Si arg no está presente y se ha suministrado -p, entonces se muestran los comandos trap asociados a cada sigspec. Si no se suministran argumentos o si sólo se da -p, trap imprime la lista de comandos asociados a cada señal.

Pero cuando corro trap -l y trap -p no produce nada.

En Ubuntu, recibo todas las señales.

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

¿Cómo puedo emitir señales de trampa de MacOS?

4voto

David Anderson Puntos 2189

Respuesta corta

Su enlace parece ser para bash . Las últimas versiones de MacOS utilizan ahora zsh como shell por defecto. La siguiente tabla resume las posibles zsh equivalentes.

Batida original

Cerrar zsh Equivalente

trampa -l

para sig en $(kill -l); do printf "%2s) SIG$sig \n " $(kill -l $sig); done
o
bash -c 'trap -l'

trampa -p

trampa

trampa -p sig

trap | grep -E sig $

trampa -p sig1 sig2 ...

trap | grep -E -e sig1 $ -e sig2 $ ...

Respuesta más larga y detallada

Su enlace parece ser para bash . Las últimas versiones de MacOS utilizan ahora zsh como el shell por defecto.

En zsh El comando que se muestra a continuación mostrará los nombres de las señales.

kill -l

Por ejemplo, el comando anterior produce la siguiente salida

HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2

Además, el comando que aparece a continuación mostrará el número de señal correspondiente a cada sig que es un nombre.

kill -l [ sig ... ]

Por ejemplo, el comando

kill -l INT QUIT ILL TRAP ABRT

producirá la siguiente salida.

2
3
4
5
6

Puede introducir man zshbuiltins para obtener ayuda con el trap y kill de los componentes para zsh .


Al entrar en trap -l el comando -l se asoció con ninguna señal. Se puede demostrar que esto es cierto añadiendo una señal al trap -l como se muestra a continuación.

trap -l USR1

Aquí, el comando -l se asocia con el USR1 señal. Esto puede demostrarse introduciendo el comando que se indica a continuación. Este comando imprime la lista de comandos asociados a USR1 señal

trap | grep -E USR1$

A continuación se muestra la salida del comando anterior.

trap -- -l USR1

Normalmente, el comando -l no existiría.


Los siguientes comandos producirían una salida similar a la del uso de bash incorporado trap -l .

for sig in $(kill -l); do printf " '%2s) SIG$sig'" $(kill -l $sig); done | xargs printf "%-15s %-15s %-15s %s\n"

A continuación se muestra el resultado de introducir el comando anterior.

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
 9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGINFO     30) SIGUSR1     31) SIGUSR2

Supongo que los comandos anteriores podrían ser envueltos en una función, como se muestra a continuación.

trap-l() { local sig; for sig in $(kill -l); do printf " '%2s) SIG$sig'" $(kill -l $sig); done | xargs printf "%-15s %-15s %-15s %s\n"; }

Esto permitiría producir la salida con sólo introducir trap-l . Sin embargo, esto podría ser simplemente una locura, ya que aparentemente podría haber introducido simplemente el comando bash -c 'trap -l' .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X