2012-07-30 2 views
2
cd some_dir && php some_crone.php || echo "$? $_" | xargs ./some_handler.php 

Alors quand j'exécute ce code depuis la console j'ai une valeur correcte pour $? et pour $ _

$? - status de sortie $ _ - Donne le dernier argument à la commande précédente. Au démarrage du shell, il donne le nom de fichier absolu du script shell en cours d'exécution.

Mais quand je mets ce code Cron:

crontab -e 
*/1 * * * * cd some_dir && php some_crone.php || echo "$? $_" | xargs ./some_handler.php 

j'ai reçu un vide $ _. S'il vous plaît aider. Je ne peux pas comprendre quel est le problème?

+2

Est-ce que cron utilise bash, ou utilise-t-il sh? –

+3

cron utilise sh, qui peut être une variante de bash sur la plupart des linux, mais est un tiret sur les plus récentes variantes d'ubuntu – Petesh

+0

Eh bien, voici votre réponse. $ _ est un bash-isme, et cela ferait du bien à une personne de ne pas utiliser les bash-ismes dans des endroits où la syntaxe sh est garantie. –

Répondre

2

Changez le shell par défaut de crontab de/bin/sh en/bin/bash en ajoutant la ligne suivante à votre crontab.

SHELL=/bin/bash