ubuntuusers.de

in ein bash script verzeichnis wechseln.

Status: Gelöst | Ubuntu-Version: Ubuntu 16.10 (Yakkety Yak)
Antworten |

Ef-Alex

Anmeldungsdatum:
18. November 2016

Beiträge: 3

Hallo liebe Leute,

ich weiß nicht wie ich es sagen soll aber ich stehe völlig auf dem Schlauch. Ich möchte im Script einfach nur das Verzeichnis wechseln um weitere Befehle aus diesem Verzeichnis auszuführen. Nur gibt mir das Script immer wieder den Fehler : Datei oder Verzeichnis nicht gefunden.

Das Script:

1
2
3
4
5
6
7
#!/bin/bash
ls -l "./"
cd -L ordner1
cd "~/../../usr/local/games/mc/ordner1"
echo 'ECHO Java -version'

Java -version

Das Ergebnis:

alex@ubuntuServer:/usr/local/games/mc$ bash start.sh
: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf './'$'\r' nicht möglich: Datei oder Verzeichnis nicht gefunden
: Datei oder Verzeichnis nicht gefunden
: Datei oder Verzeichnis nicht gefundenl/games/mc/ordner1
ECHO Java -version
start.sh: Zeile 6: $'\r': Befehl nicht gefunden
start.sh: Zeile 7: Java: Befehl nicht gefunden
alex@ubuntuServer:/usr/local/games/mc$

Ich habe das auch schon mit " " und mit ' ' und auch ohne versucht. das Ergebnis ist das selbe. Das Java -Version ist einfach nur damit dann was ausgegeben werden kann. Die Befehle funktionieren einzeln in der Konsole eingegeben super.

Ich habe ein ubuntu-16.04-server als VM laufen und das Script habe ich mit Notepad++ (Windows 7 😳 ) die Codierung ist hier auf utf-8. Angemeldet bin ich per ssh und starte das Script mit dem Befehl: bash start.sh

Was habe ich falsch gemacht oder übersehen?

Vielen Dank

Alex

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Ef-Alex schrieb:

Ich habe ein ubuntu-16.04-server als VM laufen und das Script habe ich mit Notepad++ (Windows 7 😳 ) die Codierung ist hier auf utf-8.

In der Unix-/Linux-Welt sind andere Zeilenenden üblich. Ich kenne Notepad++ nicht (mehr), kann mir aber durchaus vorstellen, dass dir dieser Editor erlaubt, das umzustellen. Was du willst, ist „LF“ statt „CR LF“. „Line ending“, „end of line“, sowas sind Stichwörter, nach denen du suchen kannst.

Achte außerdem darauf, dass du keinen UTF-8-Byte-Order-Marker verwendest.

Und zum Skript selbst: „~“ darfst du nicht quoten, wenn du möchtest, dass es zu deinem Home-Verzeichnis expandiert. Also lieber so:

cd ~/../../usr/local/games/mc/ordner1

java“ müsstest du auch klein schreiben.

Ef-Alex

(Themenstarter)

Anmeldungsdatum:
18. November 2016

Beiträge: 3

Hi Vain,

OK ich werde mal nach den Stichwörter suchen. Wenn ich das Script mit VI erstelle funktioniert. Da sieht man's, wenn man es richtig macht funktioniert es ☺

Dann geh ich mal wieder ins Internet

Vielen Dank

phunter88

Avatar von phunter88

Anmeldungsdatum:
17. April 2012

Beiträge: 6

Wohnort: Thüringen

Hallo Ef-Alex,

ich habe persönlich sehr schlechte Erfahrungen mit dem erstellen von Scripten in Windows Editoren gemacht. Meistens funktionieren diese in Linux/Ubuntu dann nicht mehr. Du kannst auch den "nano" zum erstellen deiner Scripte auf den Server verwenden. Ansonsten halte dich an das was dir Vain geschrieben hat. 😉

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

phunter88 schrieb:

Hallo Ef-Alex,

ich habe persönlich sehr schlechte Erfahrungen mit dem erstellen von Scripten in Windows Editoren gemacht. Meistens funktionieren diese in Linux/Ubuntu dann nicht mehr. Du kannst auch den "nano" zum erstellen deiner Scripte auf den Server verwenden. Ansonsten halte dich an das was dir Vain geschrieben hat.

Meistens ist aber spekulativ. Entweder man liefert sich an die Zufälle des Lebens aus, oder man geht den Problemen auf den Grund. Mit UTF-8 und Unix-Zeilenenden codiert kann Dir nichts passieren. Ein mit falschen Zeilenenden erzeugtes Script, welches der Editor dann dem entsprechenden System zuordnet, kann Dir auch mit einem Linuxeditor Ärger machen, und wenn der so konfiguriert ist, dass er per Voreinstellung CR/LF erzeugt, etwa weil man von dem Gerät Windowsrechner managt, das kann einem auch passieren.

Wichtig ist es, den Fehler wiederzuerkennen:

ls: Zugriff auf './'$'\r' nicht möglich: Datei oder Verzeichnis nicht gefunden

  • \r ist return, wie in Wagenrücklauf.

  • \n ist newline. Zeilenvorschub. Bei mechanischen Schreibmaschinen war beides mit dem Hebel verbunden, der erst, auf leichten Druck, je nach Zeilenabstandseinstellung, die Walze etwas oder etwas mehr weiterdrehte, und bei stärkerem Druck den Wagen zurückschob. Bei alten Druckern kann es noch praktische Gründe geben, einen Wagenrücklauf ohne Vorschub zu machen, um erst Text zu drucken, und dann eine Unterstreichung. Am Bildschirm wird das selten gebraucht. Für DOS hielt es trotzdem jmd. für eine gute Idee.

1
ls -l "./"

Entwickle Dich nicht zu einem Cargocultprogrammierer. Anführungsstriche setzt man nicht, um die Götter der Kommandozeile um Gnade oder Regen anzurufen, ohne je herauszufinden, was den Regen nun wirklich bewirkt. Punkt und Slash sind keine Zeichen, die der Maskierung bedürfen, also spart man sich diese 2 Zeichen.

1
cd "~/../../usr/local/games/mc/ordner1"

Hier gilt das selbe - bis auf ein Zeichen bedürfen diese keiner Maskierung, und dem einen schadet es sogar, wie vain schon schrieb. Die Tilde ist ein legitimer Dateinamensbestandteil, nur der Slash, der Ordner voneinander abgrenzt, und die binäre 0 (\0) sind in Dateinamen verboten. Die Anführungsstriche sorgen also dafür, dass ein Ordner, der ~ heißt und im aktuellen Verzeichnis liegt gesucht wird, als Ausgangspunkt für den Ordnerast.

Wenn ich das Script mit VI erstelle funktioniert.

Nicht, wenn Du mit VI Java großschreibst.

Ef-Alex

(Themenstarter)

Anmeldungsdatum:
18. November 2016

Beiträge: 3

Hi zusammen,

vielen Dank nochmal für die ausführliche Erklärung. Ihr habt mir sehr geholfen. Hab den Wald vor lauter Bäumen nicht gesehen.

user_unknown

Entwickle Dich nicht zu einem Cargocultprogrammierer.

Ist glaube ich schon zu spät. Wie gesagt ich bin ehr in der Windows Welt zu haus und ab und an schaue ich mal über Tellerrand ☺ Nach dem ich auch Java klein geschrieben habe funktionierte das natürlich auch.

Vielen Dank nochmal und bis zum nächsten Problem oder auch mal eine Lösung 😎

Alex

Antworten |