Vous avez répondu à la question avec cette déclaration :
Cron l'appelle
.sh
toutes les 2 minutes
Cron ne s'exécute pas dans un terminal, alors pourquoi vous attendez-vous à ce qu'il soit défini ?
La raison la plus courante pour obtenir ce message d'erreur est que le script tente de sourcer le .profile
de l'utilisateur qui ne vérifie pas qu'il s'exécute dans un terminal avant de faire quelque chose lié à tty. Les solutions de contournement incluent l'utilisation d'une ligne shebang comme :
#!/bin/bash-p
Ce qui provoque l'approvisionnement en scripts de profil au niveau du système qui (on l'espère) n'essaie pas de faire quelque chose de trop idiot et aura des gardes autour du code qui dépend de son exécution à partir d'un terminal.
S'il s'agit de l'intégralité du script, alors le TERM
l'erreur vient de quelque chose autre que le contenu brut du script.
L'utilisation d'une commande de terminal, c'est-à-dire "clear", dans un script appelé depuis cron (pas de terminal) déclenchera ce message d'erreur. Dans votre script particulier, la commande smbmount attend un terminal, auquel cas les solutions de contournement ci-dessus sont appropriées.
Vous pouvez voir si ce n'est vraiment pas défini . Exécutez la commande set | grep TERM
.
Sinon, vous pouvez le définir comme ça :export TERM=xterm