GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter des scripts à partir d'un autre répertoire

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.


Linux
  1. Autoriser Setuid sur les scripts Shell ?

  2. Exécuter les commandes Shell à partir du programme exécuté dans WINE

  3. Répertoire courant du script shell ?

  4. Lien symbolique d'un poste de travail à un autre sans montage

  5. comment modifier /etc/hosts à partir de scripts shell ?

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Tableaux dans les scripts shell

Comment utiliser if-else dans les scripts shell ?

CentOS :copier le répertoire dans un autre répertoire

À l'aide de la commande cp dans le shell Linux, comment copier un répertoire entier dans un autre répertoire ?

Comment supprimer une chaîne d'un fichier via des scripts shell ?