it-swarm.com.de

Wie installiere ich ein Skript, um es von der Befehlszeile aus auszuführen?

Wenn ich ein grundlegendes Python-Skript habe, mit Hashbang und was-nicht-vorhanden, so dass ich es vom Terminal unter Linux ausführen kann

/path/to/file/MyScript [args]

ohne Ausführung über den Interpreter oder Dateierweiterungen, und das Programm wird ausgeführt.

Also würde ich dieses Skript installieren, damit ich einfach tippen kann

MyScript [args]

irgendwo im System und es wird laufen? Kann dies für alle Benutzer auf dem System implementiert werden oder muss es für jeden Benutzer erneut durchgeführt werden? Platziere ich das Skript einfach in einem bestimmten Verzeichnis oder sind andere Dinge notwendig?

20
jeffbr13

Der beste Ort, um solche Dinge zu setzen, ist /usr/local/bin.

Dies ist der normale Ort für benutzerdefinierte Binärdateien und sollte früh in PATH sein.

Kopieren Sie einfach das Skript dorthin (wahrscheinlich mit Sudo), und es sollte für jeden Benutzer funktionieren.

21
agf

Exemplarische Vorgehensweise, um ein Python-Skript überall verfügbar zu machen:

Erstelle ein Python-Skript:

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

Finden Sie heraus, wo sich Ihr Python befindet:

which python
/usr/bin/python

Gib diesen Code dort ein:

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

Führen Sie das gleiche Verzeichnis aus:

python stuff.py

Gehen Sie in ein Verzeichnis und es ist nicht verfügbar:

cd ..
stuff.py

-bash: stuff.py: command not found

Nicht gefunden! Wie erwartet, fügen Sie den Dateipfad der Python-Datei zu $ ​​PATH hinzu.

vi ~/.bashrc

Füge die Datei hinzu:

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

Speichern Sie es ab, wenden Sie die .bashrc erneut an und versuchen Sie es erneut

source ~/.bashrc

Versuchen Sie es nochmal:

cd /home/el
stuff.py

Drucke:

hi

Der Trick ist, dass die Bash-Shell die Sprache der Datei über den Shebang kennt.

8
Eric Leschinski

Erstellen Sie einfach ~/bin und fügen Sie export PATH=$PATH:$HOME/bin in Ihr bashrc/profile ein. Leg dich nicht mit dem System an, es wird dich zurück beißen, vertraue mir. 

Einige weitere Dinge (relevant für die Frage, aber nicht Teil der Antwort): 

  1. Die andere Möglichkeit, export PATH=$HOME/bin:$PATH ist NICHT sicher, da bash in Ihrem ~/bin-Ordner nach ausführbaren Dateien sucht. Wenn ihr Name mit anderen ausführbaren Dateien in Ihrem ursprünglichen $PATH übereinstimmt, werden Sie von der unerwarteten/nicht funktionierenden Befehlsausführung überrascht. 
  2. Vergessen Sie nicht, chmod+x, wenn Sie Ihr Skript in ~/bin speichern.
  3. Seien Sie sich dessen bewusst, was Sie in Ihrem ~/bin-Ordner ablegen. Wenn Sie nur etwas testen oder mit unfertigen Skripts arbeiten, sollten Sie ./$SCRIPT_NAME aus Ihrer CWD verwenden, um das Skript auszuführen, als es unter ~/bin zu setzen.
8
Sudhi

Die schnelle Antwort lautet: symlink Ihr Skript für ein beliebiges Verzeichnis in Ihrem System $PATH.

Die lange Antwort wird unten mit einem Durchgangsbeispiel beschrieben (das ist, was ich normalerweise mache):

a) Erstellen Sie das Skript, z. $HOME/Desktop/myscript.py:

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

b) Ändern Sie die Berechtigung der Skriptdatei, um sie ausführbar zu machen: 

$ chmod +x myscript.py

c) Fügen Sie dem $PATH ein benutzerdefiniertes Verzeichnis hinzu (siehe Gründe in den folgenden Hinweisen), um es für die Skripts des Benutzers zu verwenden:

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

d) Erstellen Sie einen symbolischen Link zum Skript wie folgt:

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

Beachten Sie, dass hello (kann alles sein) der Name des Befehls, den Sie zum Aufrufen Ihres Skripts verwenden werden.

Hinweis: 

i) Der Grund, $HOME/bin anstelle von /usr/local/bin zu verwenden, besteht darin, die lokalen Skripts von denen anderer Benutzer (falls gewünscht) und anderen installierten Dateien zu trennen.

ii) Um einen Symlink zu erstellen, sollten Sie den vollständigen korrekten Pfad verwenden, d. h.

$HOME/bin GUT ~/bin NICHT GUT!

Hier ist ein vollständiges Beispiel:

 $ 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

Das Skript irgendwo in den PATH (wie /usr/local/bin) zu stellen, ist eine gute Lösung, aber diese zwingt alle Benutzer Ihres Systems, Ihr Skript zu verwenden.

Durch das Hinzufügen eines Alias ​​in /etc/profile können Sie das tun, was die Benutzer Ihres Systems mit dem Befehl unalias rückgängig machen möchten. Die hinzuzufügende Zeile wäre:

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

Geben Sie echo $PATH in eine Shell ein. Dies sind die Verzeichnisse, die durchsucht werden, wenn Sie command eingeben. Legen Sie sie also in eines davon. 

Bearbeiten: Anscheinend nicht /usr/bin verwenden, /usr/local/bin verwenden

3
dcpomero

Erstellen Sie einfach einen symbolischen Link zu Ihrem Skript in/usr/local/bin /:

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

Gemäß FHS ist der /usr/local/bin/ der geeignete Ort für benutzerdefinierte Skripts. Ich bevorzuge es, sie 755root:root zu machen, nachdem ich sie dort kopiert habe.

0
Michał Šrajer