Eu proponho usar uma função em vez disso:
mygulp () { trap : INT; gulp || say "Gulp has crashed"; }
O trap captará Ctrl-C (sinal de "interrupção") e executará o comando : (ou seja, nada).
Observe também || em vez de ; - assim, se gulp sair normalmente (você não pressionou ctrl-c), nada acontece, mas se o código de saída não for zero, o comando say será iniciado .
Esta função deve funcionar tanto em bash como em zsh , depois você poderá remover o último ; antes de fechar o colchete direito.