Bonjour,
est-il possible dans une ligne de crontab d'enchainer plusieurs commandes sachant que des variables initialisées dans les premieres commandes sont utilisées par les suivantes:
shell1
#/bin/sh
chaine=chemin/que/je/veux
export chaine
shell2
#/bin/sh
echo "Resultat: $chaine"
crontab
*/2 * * * * (shell1; shell2 >/tmp/verdict)
# le > correspond au sigle "superieur"
Le contenu du fichier verdict donne:
Resultat:
Et je devrais avoir (le resultat que je souhaite ;) ):
Resultat: chemin/que/je/veux
C'est un exemple simplifié, mais il decrit mon besoin.
Merci
# Sans même parler de crontab...
Posté par tgl . Évalué à 2.
Si tu ne peux pas fusionner ces scripts (genre faire en sorte que shell2 soit plutôt appelé depuis shell1), alors il faut trouver autre chose qu'une variable d'environnement pour qu'ils communiquent. Genre un fichier temporaire, ou bien des E/S standard avec un pipe entre les deux. Ou bien alors il faut te débrouiller pour que la variable arrive dans l'environnement du shell qui est leur parent à tous les deux, dans ce genre là :
--- shell1:
#!/bin/sh
chaine=chemin/que/je/veux
echo "export chaine='${chaine}'"
--- Utilisation:
eval $(shell1) ; shell2
# Exécuter dans le shell courant
Posté par netsurfeur . Évalué à 4.
Une solution consiste à faire exécuter shell1 et shell2 sans lancement de sous-shell. Pour cela, l'opérateur est . (le point)
Tu devrais obtenir ce que tu veux en faisant:
(. shell1 ; . shell2 > /tmp/verdict)
[^] # Re: Exécuter dans le shell courant
Posté par Paddle . Évalué à 1.
Et ca repond parfaitement a mes besoin du coup!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.