Cuando intento ejecutar mail
desde dentro una función en un script bash, crea algo similar a una bomba tenedor. Para aclarar, esto crea el problema:
#!/bin/bash
mail() {
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
}
mail
exit 0
A veces puedes simplemente matar el comando y matará los procesos secundarios, pero a veces tendrás que hacerlo killall -9
.
No le importa si el correo fue enviado o no. La bomba tenedor se crea de cualquier manera. Y no parece que agregar ninguna verificación para el código de salida, como if ! [ "$?" = 0 ]
, ayuda.
Pero el siguiente script funciona según lo previsto, ya sea que genera un error o envía el correo.
#!/bin/bash
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
exit 0
¿Por qué pasó esto? ¿Y cómo harías para verificar el código de salida del comando de correo?
bash
shell-script
mail-command
roxto
fuente
fuente
Respuestas:
Estás invocando la función
mail
desde la misma función:Esto debería funcionar:
Tenga en cuenta que el nombre de la función ya no se invoca desde dentro de la función misma.
fuente
De otra manera:
... debería funcionar bien.
fuente
command
parte, en cuanto al laico, es difícil notar ese cambio junto con elolly olly oxenfree
y los'and the rest' and@more
cambios, especialmente con el resaltado de sintaxis.La solución más "tradicional" en estos casos es llamar al comando con la ruta completa:
Todas las demás respuestas funcionan y probablemente sean más portátiles, pero creo que esta es la solución más probable que encontraría en los scripts en el mundo real salvaje, por lo que la incluyo para completarla.
fuente
/bin/mail
. Creo que esto demuestra el valor de lacommand mail
sintaxis./usr
porque su paradigma es mover todos los archivos binarios al mismo directorio, por lo que/bin
es solo un enlace simbólico/usr/bin
. Entonces sí ... esto no es portátil, pero se ve más comúnmente quecommand
, de alguna manera, especialmente en los scripts de arranque heredados que se hicieron específicamente para cada distribución, todas las rutas absolutas estaban codificadas (scripts rc en Slackware, por ejemplo).