GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ausführen von Skripts aus einem anderen Verzeichnis

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.


Linux
  1. Bash-Skripte beim Betreten eines Verzeichnisses ausführen?

  2. Su-Optionen – Befehl als anderer Benutzer ausführen?

  3. So führen Sie Python-Skripte von der Shell aus

  4. Aktuelles Verzeichnis des Shell-Skripts?

  5. Wie entferne ich eine Zeichenfolge aus einer Datei über Shell-Skripte?

Assoziative Arrays in Shell-Skripten?

Richtiges Sperren in Shell-Skripten?

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Wo wird ein Shell-Skript ausgeführt?

Arrays in Shell-Skripten

Wie verwende ich if-else in Shell-Skripten?