Tout d'abord, rassurez-vous concernant le double slash (//) que vous avez remarqué dans le chemin de votre script : les systèmes de type Unix l'interprètent simplement comme un / unique. Cela n'est donc pas la cause de l'erreur.
Votre problème de command not found provient en réalité de deux comportements spécifiques de Zsh, qui sont très bien documentés dans le manuel officiel :
- L'environnement des scripts non interactifs :
Lorsque vous exécutez un script via la commande zsh votre_script.zsh, Zsh démarre en mode "non interactif". Dans ce mode, il ne lit pas votre fichier ~/.zshrc. Par conséquent, toute la configuration générée par Oh-My-Zsh, y compris l'ajout de vos dossiers de fonctions à la variable $FPATH (ou $fpath), n'existe pas lors de l'exécution du script.
- La syntaxe de la commande autoload :
La commande autoload attend le nom exact de la fonction à charger, et non le chemin d'accès vers le fichier. En écrivant autoload -t .oh-my-zsh/functions/verifpart, vous demandez à Zsh de chercher une fonction dont le nom serait littéralement ".oh-my-zsh/functions/verifpart", ce qui échoue.
Pour que cela fonctionne, vous devez déclarer explicitement le dossier contenant vos fonctions dans la variable $fpath au début de votre script, puis appeler autoload uniquement avec le nom des fonctions.
Voici la correction à appliquer dans votre script principal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #!/usr/bin/zsh
## Version avec cp -a et rsync
#
d=$(date "+%d%B%Y")
local cami=""
local cami_mnt=""
local repdest=""
local repsrc=""
local filtre=""
local trace=""
# 1. On ajoute explicitement le dossier des fonctions au fpath du script.
# (L'utilisation de $HOME est préférable à ~ dans les scripts)
fpath=( "$HOME/.oh-my-zsh/functions" $fpath )
# 2. On utilise autoload avec le nom des fonctions.
# Note : L'option -U est fortement recommandée par la documentation
# pour éviter que d'éventuels alias n'interfèrent avec le chargement.
autoload -U verifpart
autoload -U rsync_sauvegardes cpsauv
# ... suite de votre script ...
# pointe sur le répertoire de montage
cami_mnt="/media/copie_interne"
# L'appel fonctionnera désormais correctement
verifpart $cami_mnt |