Si vous êtes déjà dans le /path/to répertoire, par exemple avec la cd /path/tocommande, vous pouvez entrer ./scriptpour exécuter votre script. N'oubliez pas, dans ce cas, le './' avant 'script'
FrViPofm
120
Encore une autre façon de l'exécuter (cette fois sans définir les autorisations d'exécution):
Cela ne fonctionnera que si le script a le bit d'exécution défini. Cela doit probablement être réglé.
Bryan Oakley
./scriptname.shfonctionne pour moi mais scriptname.shdonne scriptname.sh: command not found. -rwxr-xr-xsont ses autorisations.
Spikatrix
1
Le conseil de cdn'importe où à tous perpétue un autre malentendu courant pour les débutants. À moins que le script n'ait en interne des dépendances qui l'obligent à s'exécuter dans un répertoire particulier (comme, avoir besoin de lire un fichier de données sur lequel le script ne fournit inexplicablement pas d'option vers lequel pointer), vous ne devriez jamais avoir besoin d'aller cdn'importe où pour l'exécuter, et très ne voudra souvent pas.
Downvote: C'est faux si c'est correctement un script Bash.
tripleee
1
Upvote: C'est bien sur Mac OS X si votre script bash se trouve dans le même répertoire
Karl Taylor
30
@kot "Ça marche pour moi" est très loin de "c'est une bonne réponse". Cela peut fonctionner s'il shs'agit d'un lien symbolique vers bashou si le script n'utilise aucune construction spécifique à Bash. Dans le premier cas, utiliser bashau lieu de shest la seule solution correcte et portable; dans ce dernier cas, ce n'est pas la bonne réponse à cette question particulière, car l'OP a demandé des conseils pour un script Bash spécifiquement. Perpétrer la mauvaise réponse est irresponsable; les utilisateurs qui ne parviennent pas à saisir la différence publient fréquemment ici, et doivent être montrés pourquoi cette réponse «a fonctionné pour moi» n'a pas fonctionné pour eux.
@kot Je le répète: il y a des situations où cela fonctionne (comme vous l'avez découvert) mais ce n'est pas une réponse correcte dans le cas général à la question dans le titre. À tout le moins, cette réponse devrait expliquer les conditions dans lesquelles cela fonctionne; mais ma suggestion serait de simplement supprimer cette réponse.
tripleee
14
Tout d' abord , vous devez le rendre exécutable en utilisant: chmod +x name_of_your_file_script.
Une fois que vous l'avez rendu exécutable, vous pouvez l'exécuter en utilisant ./same_name_of_your_file_script
Il n'y a aucun besoin de cdn'importe où; vous pouvez spécifier un nom de chemin arbitrairement complexe comme argument de bash; en effet, tout programme qui prend un argument de nom de fichier fonctionne de cette façon (ou est terriblement, stupéfiant).
tripleee
10
C'est un vieux fil de discussion, mais je suis tombé dessus et je suis surpris que personne n'ait encore fourni de réponse complète. Alors voilà ...
Le didacticiel sur l'exécution d'un script de ligne de commande!
Q: Comment exécuter ceci dans le terminal?
Confusions et conflits:
Vous n'avez pas besoin d'une «extension» (comme .sh ou .py ou autre chose), mais cela aide à garder une trace des choses. Ça ne fera pas mal. Cependant, si le nom du script contient une extension, vous devez l'utiliser.
Vous n'avez pas du tout besoin d'être dans un certain répertoire pour quelque raison que ce soit.
Vous n'avez pas besoin de taper le nom du programme qui exécute le fichier (BASH ou Python ou autre) sauf si vous le souhaitez. Ça ne fera pas mal.
Vous ne pas besoin sudode faire tout cela. Cette commande est réservée à l'exécution de commandes en tant qu'autre utilisateur ou utilisateur «root» (administrateur). Super article ici .
(Une personne qui apprend juste à exécuter des scripts ne devrait pas utiliser cette commande à moins qu'il y ait un réel besoin, comme l'installation d'un nouveau programme. Un bon endroit pour mettre vos scripts est dans votre dossier ~ / bin. Vous pouvez y arriver en saisie cd ~/binou à cd $HOME/binpartir de l'invite du terminal. Vous disposerez des autorisations complètes sur ce dossier.)
Pour "exécuter ce script" depuis le terminal sur un système de type Unix / Linux, vous devez faire trois choses:
Indiquez au système l'emplacement du script. (choisissez-en un)
Tapez le chemin complet avec le nom du script (par exemple /path/to/script.sh). Vous pouvez vérifier le chemin complet en tapant pwdou echo $PWDdans le terminal.
Exécutez à partir du même répertoire et utilisez ./pour le chemin (par exemple ./script.sh). Facile.
Placez le script dans un répertoire qui se trouve sur le système PATHet tapez simplement le nom (par exemple script.sh). Vous pouvez vérifier le système PATHen tapant echo $PATHou echo -e ${PATH//:/\\n}si vous voulez une liste plus nette.
Dites au système que le script est autorisé à s'exécuter. (choisissez-en un)
Définissez le "bit d'exécution" en tapant chmod +x /path/to/script.shdans le terminal.
Vous pouvez également utiliser chmod 755 /path/to/script.shsi vous préférez les numéros. Il y a une excellente discussion avec un graphique sympa ici .
Dites au système le type de script. (choisissez-en un)
Tapez le nom du programme avant le script. (par exemple BASH /path/to/script.shou PHP /path/to/script.php) Si le script a une extension, telle que .php ou .py, elle fait partie du nom du script et vous devez l'inclure.
Utilisez un shebang , que je vois que vous avez ( #!/bin/bash) dans votre exemple. Si vous l'avez comme première ligne de votre script, le système utilisera ce programme pour exécuter le script. Pas besoin de taper des programmes ou d'utiliser des extensions.
Utilisez un shebang «portable» . Vous pouvez également demander au système de choisir la version du programme qui se trouve en premier dans PATHen utilisant #!/usr/bin/envsuivi du nom du programme (par exemple #!/usr/bin/env bashou #!/usr/bin/env python3). Il y a des avantages et des inconvénients comme discuté en détail ici .
Assez bon résumé. Peut-être que dans le dernier exemple, rappelez aux gens que script.shet script.phpsont les noms de fichiers littéraux de ces scripts, et que si vous mettez une extension dans le nom de fichier, vous devez l'inclure lorsque vous exécutez le script (et vice versa; si le script ne le fait pas) t avoir une extension, n'en mettez pas). Ceci est différent, par exemple, du DOS où vous pouvez omettre le .batou .exedu nom de fichier, et les fichiers doivent avoir une extension d'un petit ensemble pour être considérés comme exécutables.
tripleee
1
Une autre erreur de débutant commune incompréhension de la différence entre path, /path, ./pathet ~/path. Je suppose que vous ne voulez probablement pas l'expliquer ici, mais peut-être un lien vers une explication telle que ... oh dang, je devais poster ceci.
Cela exécute le script dans le shell actuel, qui doit être appelé. Ce n'est pas ce à quoi la plupart des gens s'attendent lorsque vous exécutez simplement un script. Cela peut avoir des effets secondaires sur votre environnement existant.
Software Engineer
-2
Si vous êtes dans un répertoire ou un dossier où le fichier de script est disponible, modifiez simplement l'autorisation du fichier en mode exécutable en faisant
chmod +x your_filename.sh
Après cela, vous exécuterez le script à l'aide de la commande suivante.
$ sudo ./your_filename.sh
Au dessus de "." représentent le répertoire courant. Remarque! Si vous n'êtes pas dans le répertoire où se trouve le fichier de script bash, vous modifiez le répertoire dans lequel se trouve le fichier en utilisant
cd Directory_name/write the complete path
commander. Sinon, votre script ne peut pas s'exécuter.
J'espère que tout le monde fera cela parce que je mentionne tout le concept lié à ce problème particulier.
Hassan Shamshir
Comme expliqué dans d'autres réponses ici, sudoest faux et potentiellement horriblement faux si vous l'utilisez sur un script non fiable qui abuse des pouvoirs que vous lui avez inutilement donnés.
tripleee
Le conseil cdquelque part est difficile à comprendre, mais probablement aussi faux.
chmod +x scriptname
et puis./scriptname
.Réponses:
$prompt: /path/to/script
et appuyez sur Entrée. Notez que vous devez vous assurer que le script dispose des autorisations d'exécution.la source
/path/to
répertoire, par exemple avec lacd /path/to
commande, vous pouvez entrer./script
pour exécuter votre script. N'oubliez pas, dans ce cas, le './' avant 'script'Encore une autre façon de l'exécuter (cette fois sans définir les autorisations d'exécution):
la source
cd dans le répertoire qui contient le script, ou placez-le dans un dossier bin qui se trouve dans votre $ PATH
puis tapez
si dans le même répertoire ou
s'il se trouve dans le dossier bin.
la source
./scriptname.sh
fonctionne pour moi maisscriptname.sh
donnescriptname.sh: command not found
.-rwxr-xr-x
sont ses autorisations.cd
n'importe où à tous perpétue un autre malentendu courant pour les débutants. À moins que le script n'ait en interne des dépendances qui l'obligent à s'exécuter dans un répertoire particulier (comme, avoir besoin de lire un fichier de données sur lequel le script ne fournit inexplicablement pas d'option vers lequel pointer), vous ne devriez jamais avoir besoin d'allercd
n'importe où pour l'exécuter, et très ne voudra souvent pas.Vous pourriez faire:
sh scriptname.sh
la source
sh
s'agit d'un lien symbolique versbash
ou si le script n'utilise aucune construction spécifique à Bash. Dans le premier cas, utiliserbash
au lieu desh
est la seule solution correcte et portable; dans ce dernier cas, ce n'est pas la bonne réponse à cette question particulière, car l'OP a demandé des conseils pour un script Bash spécifiquement. Perpétrer la mauvaise réponse est irresponsable; les utilisateurs qui ne parviennent pas à saisir la différence publient fréquemment ici, et doivent être montrés pourquoi cette réponse «a fonctionné pour moi» n'a pas fonctionné pour eux.Tout d' abord , vous devez le rendre exécutable en utilisant:
chmod +x name_of_your_file_script
.Une fois que vous l'avez rendu exécutable, vous pouvez l'exécuter en utilisant
./same_name_of_your_file_script
la source
Changez votre répertoire vers l' emplacement du script à l'aide de la commande cd
Puis tapez
la source
cd
n'importe où; vous pouvez spécifier un nom de chemin arbitrairement complexe comme argument debash
; en effet, tout programme qui prend un argument de nom de fichier fonctionne de cette façon (ou est terriblement, stupéfiant).C'est un vieux fil de discussion, mais je suis tombé dessus et je suis surpris que personne n'ait encore fourni de réponse complète. Alors voilà ...
Le didacticiel sur l'exécution d'un script de ligne de commande!
Q: Comment exécuter ceci dans le terminal?
Confusions et conflits:
sudo
de faire tout cela. Cette commande est réservée à l'exécution de commandes en tant qu'autre utilisateur ou utilisateur «root» (administrateur). Super article ici .(Une personne qui apprend juste à exécuter des scripts ne devrait pas utiliser cette commande à moins qu'il y ait un réel besoin, comme l'installation d'un nouveau programme. Un bon endroit pour mettre vos scripts est dans votre dossier ~ / bin. Vous pouvez y arriver en saisie
cd ~/bin
ou àcd $HOME/bin
partir de l'invite du terminal. Vous disposerez des autorisations complètes sur ce dossier.)Indiquez au système l'emplacement du script. (choisissez-en un)
/path/to/script.sh
). Vous pouvez vérifier le chemin complet en tapantpwd
ouecho $PWD
dans le terminal../
pour le chemin (par exemple./script.sh
). Facile.PATH
et tapez simplement le nom (par exemplescript.sh
). Vous pouvez vérifier le systèmePATH
en tapantecho $PATH
ouecho -e ${PATH//:/\\n}
si vous voulez une liste plus nette.Dites au système que le script est autorisé à s'exécuter. (choisissez-en un)
chmod +x /path/to/script.sh
dans le terminal.chmod 755 /path/to/script.sh
si vous préférez les numéros. Il y a une excellente discussion avec un graphique sympa ici .Dites au système le type de script. (choisissez-en un)
BASH /path/to/script.sh
ouPHP /path/to/script.php
) Si le script a une extension, telle que .php ou .py, elle fait partie du nom du script et vous devez l'inclure.#!/bin/bash
) dans votre exemple. Si vous l'avez comme première ligne de votre script, le système utilisera ce programme pour exécuter le script. Pas besoin de taper des programmes ou d'utiliser des extensions.PATH
en utilisant#!/usr/bin/env
suivi du nom du programme (par exemple#!/usr/bin/env bash
ou#!/usr/bin/env python3
). Il y a des avantages et des inconvénients comme discuté en détail ici .la source
script.sh
etscript.php
sont les noms de fichiers littéraux de ces scripts, et que si vous mettez une extension dans le nom de fichier, vous devez l'inclure lorsque vous exécutez le script (et vice versa; si le script ne le fait pas) t avoir une extension, n'en mettez pas). Ceci est différent, par exemple, du DOS où vous pouvez omettre le.bat
ou.exe
du nom de fichier, et les fichiers doivent avoir une extension d'un petit ensemble pour être considérés comme exécutables.path
,/path
,./path
et~/path
. Je suppose que vous ne voulez probablement pas l'expliquer ici, mais peut-être un lien vers une explication telle que ... oh dang, je devais poster ceci.Et encore une façon de plus
Quelle est la signification du point?
la source
Si vous êtes dans un répertoire ou un dossier où le fichier de script est disponible, modifiez simplement l'autorisation du fichier en mode exécutable en faisant
chmod +x your_filename.sh
Après cela, vous exécuterez le script à l'aide de la commande suivante.
$ sudo ./your_filename.sh
Au dessus de "." représentent le répertoire courant. Remarque! Si vous n'êtes pas dans le répertoire où se trouve le fichier de script bash, vous modifiez le répertoire dans lequel se trouve le fichier en utilisant
cd Directory_name/write the complete path
commander. Sinon, votre script ne peut pas s'exécuter.
la source
sudo
est faux et potentiellement horriblement faux si vous l'utilisez sur un script non fiable qui abuse des pouvoirs que vous lui avez inutilement donnés.cd
quelque part est difficile à comprendre, mais probablement aussi faux.