sh /path/to/script générera un nouveau shell et exécutera son script indépendamment de votre shell actuel. Le source
(.) appellera toutes les commandes du script dans le shell actuel. Si le script appelle exit
par exemple, vous perdrez le shell actuel. Pour cette raison, il est généralement plus sûr d'appeler des scripts dans un shell séparé avec sh ou de les exécuter en tant que binaires en utilisant soit le full (en commençant par /
) ou chemin relatif (./
). S'ils sont appelés en tant que binaires, ils seront exécutés avec l'interpréteur spécifié (#!/bin/bash
, par exemple).
Quant à savoir si un script trouvera ou non les fichiers dont il a besoin, il n'y a pas de bonne réponse, autre que de regarder le script pour voir ce qu'il fait. En option, vous pouvez toujours accéder au dossier du script dans un sous-processus sans quitter votre dossier actuel :
(cd /wherever/ ; sh script.sh)
Vous pouvez certainement le faire (avec les ajustements mentionnés par les autres comme sudo sh /pathto/script.sh
ou ./script.sh
). Cependant, je fais l'une des quelques choses pour les exécuter à l'échelle du système pour ne pas me soucier des répertoires et m'épargner une saisie supplémentaire inutile.
1) Lien symbolique vers /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(Assurez-vous qu'il n'y a pas de noms qui se chevauchent, car vous le remplaceriez évidemment.) Cela me permet également de les conserver dans mes dossiers de développement afin que je puisse les ajuster si nécessaire.
2) Ajoutez le répertoire Scripts à votre chemin (en utilisant .bash_profile - ou tout autre profil que vous avez sur votre shell)
PATH=/path/to/scripts/:$PATH
3) Créer des alias dans le .bash_profile
en ~/.bash_profile
ajoutez quelque chose comme :
alias l="ls -l"
Comme vous pouvez le constater, la syntaxe est juste un alias, les chiffres que vous voulez utiliser comme une commande, la commande. Donc, taper "l" n'importe où dans le terminal entraînerait ls -l
Si vous voulez sudo, juste alias sl="sudo ls -l"
pour vous noter l vs sl (comme exemple inutile).
Dans tous les cas, vous pouvez simplement taper sudo nameofscript
et passez votre chemin. Pas besoin de jouer avec ./ ou . ou sh, etc. Marquez-les d'abord comme exécutables :D
Je fais habituellement comme tu dis
sh /path/to/script
Et pour l'exécuter en tant que root/superuser
sudo sh /path/to/script
Votre répertoire actuel n'a d'importance que si les scripts supposent que vous vous trouvez dans le même dossier que lui. Je suppose que la plupart des scripts ne le font pas et que vous pouvez l'exécuter comme ci-dessus.