Je suis intéressé par l'automatisation des tâches quotidiennes. Jusqu'à récemment, chaque partie de l'un de mes scripts fonctionnait correctement. Mais maintenant, j'essayais de mettre en œuvre la zénité et tout s'est effondré. Maintenant, j'espère que vous pourrez voir ce que je fais de mal.fonctions bash complexes: utilisation correcte?
Soo, venant à un point: je vais avoir un script bash cruel, qui ressemble à ceci:
#!/bin/bash
dosomething() {
# code
echo $1 >> ~/test.txt # For debugging
$1 & # ← Important line
# more code
}
main() {
# other code
dosomething "/usr/bin/rsync $rsync_options" # ← Call it "do_1"
dosomething "/usr/bin/find $findme_path -iname \"*.gpx\" -print0 | xargs -0 $other_command" # ← Call it "do_2"
# another code
}
(main | (zenity --progress $zenity_options || $still_another_command) &
Quoi (devrait) se produire: La sortie principale est canalisée à zenity (barre de progression). main n'exécute aucune commande, mais appelle dosomething avec un paramètre qui contient la commande à exécuter. dosomething exécute la commande.
Ce qui se passe vraiment: La partie "echo" de dosomething fonctionne comme prévu. Une fois le script exécuté, les commandes do_1 et do_2 apparaissent correctement dans ~/test.txt. (Si je copie & collé le contenu de ~/test.txt dans mon terminal, chaque commande a été exécutée avec les résultats attendus.)
La "ligne importante" de "do_1" est exécutée avec les résultats attendus. Mais la "ligne importante" de "do_2" semble n'avoir aucun effet. Au moins, je ne peux voir aucun effet de $ other_command après l'exécution du script. J'espère que vous comprendrez au moins ce que je veux dire. Ce serait très gentil de votre part si vous me donniez un indice sur ce qui ne va pas ici.
changez le shebang en '#!/Bin/bash -x' et réexécutez-le, regardez la sortie! –