Wie führe ich ein Shell-Skript ohne sh oder bash im Windows-Subsystem für Linux aus?

Wie führe ich ein Shell-Skript ohne sh oder bash im Windows-Subsystem für Linux aus?

Ich verwende Ubuntu mit WSL (Windows Subsystem for Linux). Ich habe unten ein einfaches Shell-Skript geschrieben. Wenn ich es ausführe, tritt der folgende Fehler auf.

#! /bin/sh
# "test script"
echo "hello world"

test.sh: Befehl nicht gefunden

Aber es läuft erfolgreich, wenn ich den Befehl using sh test.shoder ausführe bash test.sh.

Gibt es also eine Möglichkeit, es ohne shdas native Linux auszuführen?

Antwort1

Sie können es immer als ausführen ./test.sh.

./wird in das aktuelle Verzeichnis aufgelöst und endet mit /, sodass Sie effektiv den vollständigen Pfad zu Ihrem Skript angeben.

test.shFunktioniert nur, wenn sich Ihr aktuelles Verzeichnis in befindet . $PATHDies ist nicht exklusiv für WSL.

Antwort2

Grundlagen:

Erste:
Sie erstellen ein Skript mit einem „Shebang“ in der ersten Zeile. Dies definiert, ob beispielsweise Bash, Python oder Perl den Rest der Textdatei versteht.

Dies sieht normalerweise so aus: #!/bin/bashoder #!/bin/env pythonso ähnlich

Zweite:
Stellen Sie sicher, dass die Datei das xFlag - für eine Auswahl von hat user, groupund/oder others ( man chmodfür weitere Details) durch Verwendung von zB
chmod 755 script_filename

Dritte:
Legen Sie es in einem Ordner (Verzeichnis) auf Ihrer Festplatte oder einem fest installierten Speichermedium ab.
Dies mkdir -p $HOME/bin/könnte für persönliche Dinge eine gute Idee sein.

Vierte:
Stellen Sie sicher, dass der Ordner angegeben ist in echo $PATH- durch das Hinzufügen einer Zeile mit
export PATH=$PATH:/absolute/path/to/folder/
in$HOME/.bash_aliases

Wenn alle diese Voraussetzungen erfüllt sind, ist Ihr Skript zugänglich (ausführbar) -in einer neu gestarteten Shell (damit Nr. 4 wirksam wird)- indem Sie den Namen nur in die Bash-Eingabeaufforderung eingeben.
(Hinweis: WSL ist/war zumindest in der ersten Inkarnation ein Ubuntu von Canonical)


Mehr Details:https://tldp.org/guides.html- in den Bash-Anleitungen

verwandte Informationen