ubuntuusers.de

Bash: Command not found

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

DrScott Team-Icon

Ehemalige
Avatar von DrScott

Anmeldungsdatum:
7. Juli 2005

Beiträge: 6018

Wohnort: Nürnberg

Woher soll der Computer denn wissen, womit das Skript gestartet werden soll? In der Variante, in der Du das selber mit angibst, ist es natürlich klar. Aber sonst?

Was deinem Skript fehlt ist das sogenannte "Shebang". Näheres findest Du hier: http://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger

raleeha

Avatar von raleeha

Anmeldungsdatum:
27. April 2010

Beiträge: 75

naja das problem besteht auch nach wie vor nachdem ich mein skript so geändert hab

#!/bin/bash
echo "ach ja"
ls
echo "soso"

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

raleeha schrieb:

naja das problem besteht auch nach wie vor nachdem ich mein skript so geändert hab

#!/bin/bash
echo "ach ja"
ls
echo "soso"

Hast du es überhaupt ausführbar gemacht?

chmod +x skripttest.sh

Ausführen:

./skripttest.sh

raleeha

Avatar von raleeha

Anmeldungsdatum:
27. April 2010

Beiträge: 75

./skripttest.sh

ja das funktioniert schon...aber wenn ich nur

skripttest

schreibe...kommt

bash: skripttest: command not found

also ich kann ein skript mit ./skripttest.sh starten aber nur skripttest funktioniert nicht

prometheus0815

Anmeldungsdatum:
12. Juni 2006

Beiträge: 7478

raleeha schrieb:

also ich kann ein skript mit ./skripttest.sh starten aber nur skripttest funktioniert nicht

Wie soll das denn auch gehen, wenn die Datei nun mal skripttest.sh heißt? Und zur expliziten Pfadangabe mit ./ wurde ja oben schon was geschrieben.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

raleeha schrieb:

also ich kann ein skript mit ./skripttest.sh starten aber nur skripttest funktioniert nicht

Ja sicher, das ist normalerweise so ! - mal abgesehen davon, dass du da einfach die Endung weglässt.

Die Erklärung ist auch ganz einfach. Guck Dir mal an was im Suchpfad steht:

track@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games

Da steht das aktuelle Verzeichnis ./ normalerweise nicht mit dabei, und das heimlich hinzufügen wie DOS tut Linux nunmal nicht.

Also sucht Linux ausführbare Dateien nicht im aktuellen Verzeichnis. Das ist als Schutz gegen "versehentliches" ausführen von womöglich bösartigen Dateien auch durchaus gewollt. Hat natürlich den Nachteil dass Du ihm den Pfad ausdrücklich angeben musst, z.B. als ./skripttest.sh

track

p.s.: ich sehe gerade, das Thema war weiter oben schon abgehandelt ...
Aber Linux ist eben nicht DOS, wo bei solchen Sachen so bequem "gemogelt" wird.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

@track: Ich weiss nicht ob man das bei DOS als "gemogelt" bezeichnen sollte. Unter DOS war bzw. ist es halt üblich, das Programme zusammen mit ihren Daten in einem Unterverzeichnis landen, d.h. die ausführbaren Programme sind nicht alle in relativ fest vorgegebenen Verzeichnissen, sondern über die ganze Platte verteilt. Und da wäre es sehr umständlich, wenn man immer den ganzen Pfad angeben müsste.

Zumal die Programme oft ähnliche Namen hatten wie zum Beispiel start.exe oder game.exe und sehr oft gab es bei Spielen auch eine setup.exe oder config.com. Bei einer Beschränkung auf 8 Zeichen ist das auch nicht so einfach Namenskollisionen zu vermeiden.

Nachtrag: Wenn man in seinem Heimatverzeichnis ein Unterverzeichnis mit dem Namen bin/ anlegt, dann sollte das nach dem nächsten Login automatisch im Pfad auftauchen:

bj@s8n:~$ echo $PATH
/home/bj/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

Das ist für selbstgeschriebene Programme die man nicht global installieren möchte ganz praktisch. Da muss man auch keine Administratorrechte erlangen, um dort etwas zu "installieren".

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Marc 'BlackJack' Rintsch schrieb:

@track: Ich weiss nicht ob man das bei DOS als "gemogelt" bezeichnen sollte...

Bei "gemogelt" denke ich nicht nur an die Frage mit den Pfaden, sondern auch an das was prometheus0815 angesprochen hatte.

Ein Programm heißt z.B. test.bat oder test.exe oder test.com oder ... und wird einfach als

test

gestartet. Und da war es bei Hackern doch beliebt, einem meintest.exe ein meintest.com unterzuschieben, das dann natürlich Vorrang hatte. Und nach Belieben den gewünschten Schweinkram tun konnte, bevor es die Funktion von meintest.exe ausführte ...

Sowas macht *nix natürlich alles nicht, weil da grundsätzlich keine Endungen "weggemogelt" werden. Und auch ein x kein X ist.

- das nur als Randbemerkung zum Thema DOS und mogeln -

track

Dalai

Avatar von Dalai

Anmeldungsdatum:
16. Juni 2008

Beiträge: 2316

Wohnort: Meiningen

Mal unabhängig vom Thema das Threads, ist mir dies aufgefallen:

raleeha schrieb:

# /dev/sda3
UUID=b4c8b873-7690-4c4c-a61c-36beb2eee892 /               ext3    relatime,errors=remount-ro 0       1
[...]
#/dev/sdc				       	
UUID="A8A0-A4D5"                          /               fat32
# /dev/sdd                                  
UUID=2ef7e1ee-06dd-4967-845b-9e3111dfea76 /             reiserfs 

Merkst du was? Is ne super Idee, alles auf / zu mounten, oder wie? Davon abgesehen frage ich mich, wie Geräte wie sdd oder sdc gemountet werden sollen... Und einige Spalten fehlen ebenfalls für die letzten beiden Einträge. Da ist ja so viel falsch...

MfG Dalai

DrScott Team-Icon

Ehemalige
Avatar von DrScott

Anmeldungsdatum:
7. Juli 2005

Beiträge: 6018

Wohnort: Nürnberg

Wenn das Skript dann mal fertig ist, dann wird es am besten nach /usr/local/bin/ kopiert (Eigentümer dann aber auch auf root.root setzen). Dann ist das Skript auch bequem im Pfad.

Antworten |