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?
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.
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.
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):
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. chmod+x
lorsque vous enregistrez votre script dans ~/bin
.~/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
.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!
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
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
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
Selon FHS , le /usr/local/bin/
est le bon endroit pour les scripts personnalisés. Je préfère les rendre 755
root:root
, après les avoir copiés ici.