sh /path/to/script erzeugt eine neue Shell und führt ihr Skript unabhängig von Ihrer aktuellen Shell aus. Der source
(.) Der Befehl ruft alle Befehle im Skript in der aktuellen Shell auf. Wenn das Skript zufällig exit
aufruft Beispielsweise verlieren Sie dann die aktuelle Shell. Aus diesem Grund ist es normalerweise sicherer, Skripte in einer separaten Shell mit sh aufzurufen oder sie als Binärdateien auszuführen, indem entweder die vollständige (beginnend mit /
) oder relativer Pfad (./
). Wenn sie als Binärdateien aufgerufen werden, werden sie mit dem angegebenen Interpreter ausgeführt (#!/bin/bash
, zum Beispiel).
Um zu wissen, ob ein Skript die benötigten Dateien findet oder nicht, gibt es keine gute Antwort, außer sich das Skript anzusehen, um zu sehen, was es tut. Als Option können Sie jederzeit in einem Unterprozess zum Ordner des Skripts wechseln, ohne Ihren aktuellen Ordner zu verlassen:
(cd /wherever/ ; sh script.sh)
Das geht auf jeden Fall (mit den von den anderen erwähnten Anpassungen wie sudo sh /pathto/script.sh
oder ./script.sh
). Ich tue jedoch eines der wenigen Dinge, um sie systemweit auszuführen, um mich nicht um Verzeichnisse zu kümmern und mir nutzloses zusätzliches Tippen zu ersparen.
1) Symlink zu /usr/bin
ln -s /home/username/Scripts/name.sh /usr/bin/name
(Stellen Sie sicher, dass es dort keinen überlappenden Namen gibt, da Sie ihn offensichtlich außer Kraft setzen würden.) Dadurch kann ich sie auch in meinen Entwicklungsordnern behalten, damit ich sie bei Bedarf anpassen kann.
2) Fügen Sie das Scripts-Verzeichnis zu Ihrem Pfad hinzu (unter Verwendung von .bash_profile - oder was auch immer.profile Sie auf Ihrer Shell haben)
PATH=/path/to/scripts/:$PATH
3) Erstellen Sie Alias's im .bash_profile
in ~/.bash_profile
etwas hinzufügen wie:
alias l="ls -l"
Wie Sie sehen können, ist die Syntax nur ein Alias, Ziffern, die Sie als Befehl, den Befehl, verwenden möchten. Wenn Sie also irgendwo im Terminal "l" eingeben, würde dies zu ls -l
führen Wenn Sie sudo wollen, einfach alias sl="sudo ls -l"
notieren Sie sich l vs sl (als nutzloses Beispiel).
In beiden Fällen können Sie einfach sudo nameofscript
eingeben und mach dich auf den Weg. Keine Notwendigkeit, mit ./ oder . oder sh usw. Markieren Sie sie einfach zuerst als ausführbar :D
Normalerweise mache ich das, was du sagst
sh /path/to/script
Und um es als root/superuser auszuführen
sudo sh /path/to/script
Ihr aktuelles Verzeichnis spielt nur eine Rolle, wenn das Skript davon ausgeht, dass Sie sich im selben Ordner wie es befinden. Ich würde davon ausgehen, dass die meisten Skripte dies nicht tun und Sie es sicher wie oben ausführen können.