Wie mache ich ein Shell-Skript global?

82

Ich arbeite mit Mac OS 10.6 und versuche, ein oder zwei Dinge über Shell-Skripte zu lernen. Ich verstehe, wie man ein Shell-Skript speichert und ausführbar macht, aber ich frage mich, was ich tun kann oder wo ich die Datei speichern kann, um sie global zu machen (dh unabhängig davon, in welchem ​​Ordner ich mich befinde).

Wenn ich beispielsweise eine .sh-Datei im Verzeichnis / Users / username / speichere und ausführbar mache, kann ich dieses Skript nur in diesem bestimmten Verzeichnis ausführen. Wenn ich beispielsweise zu / Users / username / Downloads navigiere, kann ich das Skript nicht ausführen.

Außerdem sind Vorschläge für Ressourcen hilfreich, um mehr über Shell-Skripte zu erfahren. Vielen Dank

Zebraman
quelle
1
Lesen Sie zuerst die PATHUmgebungsvariable und aktualisieren Sie dann die Frage.
S.Lott

Antworten:

135

/usr/local/binwäre der am besten geeignete Ort. Mac OS X hat es PATHstandardmäßig in der

unbeli
quelle
Bingo! Danke :)
Patrick Lynch
44

Traditionell gehen solche Skripte entweder ein ~/bin(dh das bin-Verzeichnis in Ihrem Home-Verzeichnis) oder /usr/local/bin/das erstere bedeutet, dass das Skript nur für Sie funktioniert, das letztere für Skripte, die jeder auf dem System ausführen kann.

Wenn Sie es eingeben ~/bin, müssen Sie es möglicherweise zu Ihrer Umgebungsvariablen PATH hinzufügen. /usr/local/binsollte schon auf dem Weg sein.

Bryan Oakley
quelle
30

Es gibt zwei Möglichkeiten, dies zu tun -

  1. Legen Sie Ihr Skript in usr / local / bin ab und stellen Sie sicher, dass es ausführbar ist (chmod + x my_script) (Dies ist bereits im Pfad festgelegt. Sie können dies überprüfen, indem Sie ein Echo $ PATH ausführen.)
  2. Erstellen Sie in Ihrem Home-Verzeichnis einen Ordner mit dem Namen bin. (Für Ihre persönlichen Skripte)
    • cd ~ (Bringt Sie zu Ihrem Home-Verzeichnis)
    • mkdir bin (erstelle einen bin Ordner)
    • vim .bash_profile (zum Festlegen der Pfadumgebungsvariablen)
    • export PATH = ~ / bin: $ PATH (Drücke i, füge diese Zeile hinzu und mache dann esc und tippe: wq)
    • Jetzt können Sie einfach den Namen Ihres Skripts eingeben und es an einer beliebigen Stelle ausführen.

** HINWEIS : Wenn Sie das Skript mit einem verkürzten Befehl ausführen möchten, anstatt Ihren gesamten Dateinamen einzugeben, fügen Sie Ihrem .bash_profile Folgendes hinzu:
alias myscript='my_script.sh'
Anschließend können Sie das Skript durch einfaches Eingeben ausführen myscript. (Sie können einen beliebigen Alias ​​eingeben)

Piqué
quelle
4

Im Mac-Betriebssystem

  • Öffnen Sie die Datei bash ~ / .bashrc.
  • Fügen Sie den Pfad Ihres Skripts mit export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell" in Ihre bashrc-Datei ein.
  • Öffnen Sie Ihre Datei ~. / Bash_profile und fügen Sie [[-s ~ / .bashrc]] && source ~ / .bashrc hinzu
  • Neues Terminalfenster öffnen Wenn Sie jetzt Ihr Terminal öffnen, wird Ihr Skript geladen
Sher Mohammad
quelle
warum nicht einfach direkt hineinstecken .bash_profile? Es ist viel einfacher (und diese Quelle .bashrc hat bei mir nie funktioniert).
szeitlin
Ich habe nachgeforscht, dass bash_profile ausgeführt wird, wenn Sie sich anmelden. Bashrc wird standardmäßig für Nicht-Login-Shells verwendet, OS X standardmäßig wie Login-Shells und das Laden von bash_profile. Das Hinzufügen von bash_profile funktioniert also einwandfrei. Wenn Sie in bashrc schreiben, müssen Sie [[- - s ~ / .bashrc]] && source ~ / .bashrc in bash_profile, um bashrc zu laden, wenn bash_profile zur Anmeldezeit ausgeführt wird
Sher Mohammad
4

Dieser ist super einfach, wenn Sie mit Ihrer bashrc-Datei vertraut sind! Dies verwendet ausschließlich Ihre .bashrc-Datei und dauert 2 Sekunden.

(Ich verwende Arch Linux Manjaro, also verwende ich .bashrc in meinem Home-Verzeichnis.)

Der Code, der in Ihre .bashrc-Datei eingefügt werden soll:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Wie Sie sehen können, verwenden Sie zuerst den einfachen Befehl 'cd' und geben ihm das Verzeichnis des Speicherorts des Skripts an. Verwenden Sie dann '&&', damit Sie den nächsten Befehl direkt danach ausführen und schließlich Ihr Skript so öffnen können, wie Sie es möchten normalerweise! Super einfach und direkt in Ihrer .bash-Datei gespeichert! :) :)

Hoffe ich habe jemandem geholfen!

Mit freundlichen Grüßen,

AnonymousX

AnonymousX
quelle
das ist großartig ... und es ermöglicht meinem zsh, sich automatisch zu vervollständigen!
Mailand
2

Wenn Sie die Bash-Shell verwenden, schreiben Sie dieses Skript als Funktion und legen Sie es dann in der .bashrc-Datei ab oder geben Sie die Datei, die diese Funktion enthält, unter "Quelldateiname" an.

Führen Sie nun das Skript per Funktionsaufruf in der Shell aus.

Purushothaman Poovai
quelle
1

Wenn Sie es entweder in /usr/bineinem anderen Verzeichnis speichern (oder in einem anderen vorhandenen Verzeichnis PATH) oder es bearbeiten PATH, um das Verzeichnis einzuschließen, in dem Sie es gespeichert haben, wird es grundsätzlich in einem beliebigen Verzeichnis ausgeführt.

Du
quelle
7
/usr/binkann während eines Betriebssystem-Upgrades vollständig geleert und ersetzt werden, wodurch Ihr Skript auf mysteriöse Weise verschwindet. /usr/local/binist für diesen Zweck, wie von Bryan Oakley erwähnt. Siehe auch den Dateisystem-Hierarchie-Standard
Stephen P
0

aus dem Arbeitsverzeichnis von 'script.sh' "mv [script.sh] / usr / local / bin" (nicht getestet, scheint aber der am wenigsten komplexe Weg zu sein, IMO.)

d1gl3r
quelle
1
Sie werden es wahrscheinlich brauchen sudo mv script.sh /usr/local/bin, da dieses Verzeichnis ohne eskalierende Berechtigungen nicht beschreibbar ist.
Perette
-2

Sie sollten es in das globale ausführbare Verzeichnis auf Ihrem Computer ablegen. Ich denke, dass dies normalerweise /usr/binauf Unix-basierten Betriebssystemen der Fall ist (dies erfordert jedoch meistens Superuser-Berechtigungen auf diesem Computer).

Sie können es auch in ein anderes Verzeichnis in der $PATHUmgebungsvariablen einfügen, obwohl es nur für Benutzer funktioniert, die dieses Verzeichnis in dieser Variablen haben.

Sie können den Wert von ermitteln, $PATHindem Sie echo $PATHeine Shell eingeben . Die Verzeichnisse sind durch getrennt : .

Frxstrem
quelle
9
Ich werde abstimmen, weil / usr / bin die falsche Antwort ist. / usr / local / bin wurde speziell für "lokale" Skripte entwickelt (dh solche, die Sie erstellen, anstatt solche, die mit dem System geliefert werden).
Bryan Oakley