web-dev-qa-db-fra.com

Comment installer un script à exécuter n'importe où à partir de la ligne de commande?

Si j'ai un script Python de base, avec hashbang et ce qui n'est pas en place, pour pouvoir utiliser le terminal sous Linux,

/path/to/file/MyScript [args]

sans exécuter par l'interpréteur ou des extensions de fichier, et il exécutera le programme.

Alors, installerais-je ce script pour pouvoir taper simplement

MyScript [args]

n'importe où dans le système et il fonctionnera? Cela peut-il être appliqué à tous les utilisateurs du système ou doit-il être refait pour chacun? Dois-je simplement placer le script dans un répertoire spécifique ou d’autres choses sont-elles nécessaires?

20
jeffbr13

Le meilleur endroit pour mettre de telles choses est /usr/local/bin.

C’est l’endroit habituel pour installer les fichiers binaires installés sur mesure et doit figurer au début de votre PATH.

Copiez simplement le script ici (probablement en utilisant Sudo), et cela devrait fonctionner pour tout utilisateur.

21
agf

Procédure pas à pas pour rendre un script python disponible n'importe où:

Faire un script python:

cd /home/el/bin
touch stuff.py
chmod +x stuff.py

Découvrez où se trouve votre python:

which python
/usr/bin/python

Mettez ce code dedans:

#!/usr/bin/python
print "hi"

Exécute le même répertoire:

python stuff.py

Monte un répertoire et il n'est pas disponible:

cd ..
stuff.py

-bash: stuff.py: command not found

Pas trouvé! C’est ce que nous attendons, ajoutez le chemin du fichier python au répertoire $ PATH

vi ~/.bashrc

Ajouter le fichier:

export PATH=$PATH:/home/el/bin

Enregistrez-le, appliquez à nouveau le fichier .bashrc, puis réessayez

source ~/.bashrc

Réessayer:

cd /home/el
stuff.py

Impressions:

hi

Le truc, c'est que la bash Shell connaît la langue du fichier via le Shebang.

8
Eric Leschinski

Créez simplement ~/bin et mettez export PATH=$PATH:$HOME/bin dans votre base/profil. Ne plaisante pas avec le système, il va te mordre en arrière, fais-moi confiance. 

Peu plus de choses (pertinentes pour la question mais qui ne font pas partie de la réponse): 

  1. L’autre façon dont export PATH=$HOME/bin:$PATH n’est PAS sûr, car bash examinera votre dossier ~/bin pour les exécutables, et si leur nom correspond à d’autres exécutables dans votre $PATH original, vous serez surpris par l’exécution de commandes inattendues/qui ne fonctionnent pas. 
  2. N'oubliez pas de chmod+x lorsque vous enregistrez votre script dans ~/bin.
  3. Sachez ce que vous mettez dans votre dossier ~/bin; si vous testez quelque chose ou travaillez sur un script non terminé, il est toujours préférable d'utiliser ./$SCRIPT_NAME depuis votre CWD pour exécuter le script plutôt que de le placer sous ~/bin.
8
Sudhi

La réponse rapide est de symlink votre script dans n’importe quel répertoire inclus dans votre $PATH système.

La réponse longue est décrite ci-dessous avec un exemple détaillé (c'est ce que je fais normalement):

a) Créez le script, par exemple. $HOME/Desktop/myscript.py:

#!/usr/bin/python
print("Hello Pythonista!")

b) Modifiez l'autorisation du fichier de script pour le rendre exécutable: 

$ chmod +x myscript.py

c) Ajoutez un répertoire personnalisé au $PATH (voir pourquoi dans les notes ci-dessous) pour l'utiliser pour les scripts de l'utilisateur:

$ export PATH="$PATH:$HOME/bin"

d) Créez un lien symbolique vers le script comme suit:

$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello

Notez que hello (peut être n'importe quoi) est le nom de la commande que vous utiliserez pour appeler votre script.

Remarque: 

i) La raison d'utiliser $HOME/bin au lieu du /usr/local/bin est de séparer les scripts locaux de ceux d'autres utilisateurs (si vous le souhaitez) et des autres éléments installés.

ii) Pour créer un lien symbolique, vous devez utiliser le chemin complet correct, c.-à-d.

$HOME/bin GOOD ~/bin NO GOOD!

Voici un exemple complet:

 $ pwd
 ~/Desktop
 $ cat > myscript.py << EOF
 > #!/usr/bin/python
 > print("Hello Pythonista!")
 > EOF
 $ export PATH="$PATH:$HOME/bin"
 $ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
 $ chmod +x myscript.py
 $ hello
Hello Pythonista!
6
Aziz Alto

Mettre le script quelque part dans le PATH (comme /usr/local/bin) est une bonne solution, mais ceci oblige - tous les utilisateurs de votre système à utiliser/voir votre script.

Ajouter un alias dans /etc/profile peut être un moyen de faire ce que vous voulez, ce qui permet aux utilisateurs de votre système d'annuler cette opération à l'aide de la commande unalias. La ligne à ajouter serait:

alias MyScript=/path/to/file/MyScript
4
jfg956

Tapez echo $PATH dans un shell. Ce sont les répertoires recherchés lorsque vous tapez command, alors mettez-le dans l'un de ceux-ci. 

Modifier: Apparemment, n'utilisez pas /usr/bin, utilisez /usr/local/bin

3
dcpomero

Créez simplement un lien symbolique vers votre script dans/usr/local/bin /:

Sudo ln -s /path/to/your/script.py /usr/local/bin/script
2
Iurii

Selon FHS , le /usr/local/bin/ est le bon endroit pour les scripts personnalisés. Je préfère les rendre 755root:root, après les avoir copiés ici.

0
Michał Šrajer