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.sh
oder ausführe bash test.sh
.
Gibt es also eine Möglichkeit, es ohne sh
das 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.sh
Funktioniert nur, wenn sich Ihr aktuelles Verzeichnis in befindet . $PATH
Dies 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/bash
oder #!/bin/env python
so ähnlich
Zweite:
Stellen Sie sicher, dass die Datei das x
Flag - für eine Auswahl von hat user
, group
und/oder others
( man chmod
fü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