Très souvent, le script que je veux exécuter n'est pas situé dans mon répertoire de travail actuel et je ne veux pas vraiment le laisser.
Est-ce une bonne pratique pour exécuter des scripts (bash, perl, etc.) d'un autre répertoire? Est-ce qu'ils trouveront généralement tout ce dont ils ont besoin pour courir correctement?
Si oui, quelle est la meilleure façon de gérer un script "distant"? Est-ce
. /path/to/script
ou alors
sh /path/to/script
et comment utiliser Sudo
Dans de tels cas? Ceci, par exemple, ne fonctionne pas:
Sudo . /path/to/script
Vous pouvez définitivement le faire (avec les ajustements des autres mentionnés comme Sudo sh /pathto/script.sh
Ou ./script.sh
). Cependant, je fais une des rares choses pour les exécuter de manière large pour ne pas s'inquiéter de DirS et me sauver une dactylographie supplémentaire inutile.
1) Symlink to /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(Assurez-vous qu'il n'y a pas de nom qui se chevauchent là-bas, car vous le poseriez évidemment.) Cela me permet également de les garder dans mes dossiers de développement afin que je puisse vous adapter si nécessaire.
2) Ajoutez les scripts Dir à votre chemin (en utilisant .bash_profile - ou quoi que ce soit.Profile que vous avez sur votre shell)
PATH=/path/to/scripts/:$PATH
3) Créez l'alias dans le .bash_profile
Dans ~/.bash_profile
Ajouter quelque chose comme:
alias l="ls -l"
Comme vous pouvez le dire, la syntaxe est simplement un alias, des chiffres que vous souhaitez agir en tant que commande, la commande. Donc, dactylographier "L" n'importe où dans le terminal aurait abouti au ls -l
Si vous voulez sudo, il suffit de alias sl="Sudo ls -l"
Pour noter vous-même L vs SL (comme exemple inutile).
De toute façon, vous pouvez simplement taper Sudo nameofscript
Et être sur votre chemin. Pas besoin de gâcher ./ ou. ou sh, etc., marquez-les comme exécutables en premier: D
J'aime habituellement comme tu dis que tu dis
sh /path/to/script
Et pour le courir comme racine/superutilisateur
Sudo sh /path/to/script
Votre annuaire actuel ne comporte que si les scripts supposent que vous êtes dans le même dossier que celui-ci. Je supposerais que la plupart des scripts ne font pas cela et que vous êtes épargné pour l'exécuter comme ci-dessus.
Je garde habituellement mes scripts dans /usr/local/bin
ou alors /usr/local/sbin/
(Si le script a besoin de privilèges racines) où, selon la norme de la hiérarchie des systèmes de fichiers (FHS), ils appartiennent.
Tout ce que vous avez à faire est de vous assurer que ces deux répertoires sont ajoutés à votre PATH
. Vous pouvez le faire en édité votre $HOME/.bashrc
Fichier et ajouter cette ligne:
export PATH=$PATH:/usr/local/sbin:/usr/local/bin
Si vous souhaitez pouvoir exécuter un script en tant que racine via Sudo
, vous devez ajouter ces répertoires à la variable secure_path
dans ton /etc/sudoers
.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Modification Ce fichier est effectué en exécutant visudo
qui vous garantit que vous n'avez aucune erreur.
Je ne sais pas pourquoi personne n'a suggéré celui-ci, mais c'est super facile! J'ai googlé plusieurs fois et je ne pouvais pas trouver cette réponse exacte que je donne, alors je pensais que je partagerais. IMO, mais la meilleure solution, aussi la plus facile, pour moi quand même, mais d'autres peuvent ressentir et faire les choses différemment.
# Place this somewhere in your .bashrc/.bash_profile/etc and edit as you see fit
YOURCOMMAND () {
cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}
Premièrement, la commande "CD" lui indique le répertoire de l'emplacement des scripts. Alors '&&' afin que vous puissiez l'attacher après avoir excusé la commande suivante. Enfin, ouvrez votre script comme vous l'exécuteriez dans le terminal! Enregistré votre dans votre fichier Bash et prend 5 secondes à la configuration.
J'espère que cela a aidé quelqu'un.
Si vous avez des scripts situés autour de cela, vous devez courir souvent et ils dépendent de leur emplacement pour trouver des ressources que vous pouvez facilement faire cela en combinant des commandes dans un alias comme celui-ci.
alias run-script="cd /home/user/path/to/script/ && bash script.sh"
De cette façon, vous n'avez pas à modifier autre chose pour le faire fonctionner.