web-dev-qa-db-fra.com

Erreur de syntaxe: EOF dans la substitution entre cotes

J'ai planifié le travail suivant:

root@alexus:~# crontab -l | grep ^\@hourly
@hourly     OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# OUT=`/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10% --critical=5%` ; if [ $? != 0 ] ; then echo $OUT ; fi
root@alexus:~# cat /etc/issue.net 
Ubuntu 14.04.3 LTS
root@alexus:~# 

et même si je suis capable de lancer EXACTEMENT un seul et même paquebot dans Shell, chaque fois que le travail est exécuté via cron, je reçois le courrier électronique suivant:

Subject: Cron OUT = `/ usr/lib/nagios/plugins/check_disk --include-type = ext4 --warning = 10/bin/sh: 1: Erreur de syntaxe: EOF lors de la substitution de citation inverse

par sujet, il semble que tout ce qui suit le signe % est manquant.

Comment puis-je y échapper correctement sans casser mon script?

2
alexus

Vous devrez vérifier votre page de manuel crontab(5). Certaines implémentations de cron utiliseront % comme un saut de ligne dans le champ de commande afin que vous puissiez passer des données à la commande sur stdin

* * * * * >$HOME/cron.cat.out cat%hello%world

Ensuite "cron.cat.out" contient 2 lignes:

hello
world

Tu auras besoin

  • pour échapper à vos signes de pourcentage
  • Je recommande d'utiliser $() au lieu de backticks
  • Citez le "$OUT" - citez toujours vos variables à moins que vous n'ayez besoin des effets secondaires spécifiques de les laisser sans citation.
@hourly     OUT=$(/usr/lib/nagios/plugins/check_disk --include-type=ext4 --warning=10\% --critical=5\%) || echo "$OUT"
# ...................................................................................^..............^
5
glenn jackman