web-dev-qa-db-fra.com

Exécution de scripts d'un autre répertoire

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
11
Desmond Hume

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

7
nerdwaller

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.

3
Bolli

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.

3
l1zard

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.

0
AnonymousX

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.

0
EvR2f