Traitement simultané des signaux dans un script shell

Il semble que le shell puisse exécuter simultanément des gestionnaires de signaux (actions d’interruption) si le shell reçoit un nouveau signal alors qu’il est occupé avec le précédent. Voici un exemple de script

handler() { echo -n '' } trap handler USR1 ... 

Qui produit la sortie suivante

 <ab<abcde>cde> ^ ^ ^ | | | signal received 

Ce comportement interrompt les gestionnaires complexes.

J’ai trouvé expérimentalement que l’atomicité peut être obtenue grâce à l’exécution dans un sous-shell:

 trap '(handler)' USR1  ^ ^ ^ | | | signal received 

Et ce foo=$(handler) est aussi atomique (au sens où il ne sera pas interrompu par un signal), permettant aux gestionnaires de changer l’état du shell.

Cependant, le problème semble être spécifique à Linux: bash sous Mac OS n’interrompt pas du tout les gestionnaires. Cela fait que ma solution repose sur un comportement non documenté pour surmonter le comportement spécifique à la plate-forme non documenté. Cela ne semble pas être fiable.

Je n’ai trouvé aucune connaissance sur le sujet. Existe-t-il un moyen standard / meilleur pour y faire face?