Sie sind nicht angemeldet.

  • »Phaeraun« ist der Autor dieses Themas

Beiträge: 4

Registrierungsdatum: 26.07.2012

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

1

26.07.2012, 11:40

Problem mit der Ausführung eines Shellscriptes.

Hallo allerseits, ich hab folgendes Problem.
Ich dabei ein Shellskript zuschreiben für die Installation verschiedener Programme. Nun hab ich, aufgrund der Installationsgeschwindigkeit, dieses Scirpt auf einem Server mit einer Virtual Box, in der Ubuntu 10.04 LT lauft, geschrieben.
Ausgeführt werden soll es aber auf Arbeitsplatzrechnern, dort ebenfalls in einer Virtual Box mit Ubuntu 10.04 LT. Nun Hab ich das Problem. dass das Script sich auf dem Server ausführen läst, aber auf dem Arbeitsplatz rechner mit folgender für mich kryptischer Fehlermeldung beendet:

Quellcode

1
2
3
4
root@linux-desktop:/home/linux/script# ./installMiniEnv.sh
: Kommando nicht gefunden. 1:
'/install Mini Env.sh: Zeile 24: Sysntaxfehlerbeiunerwartetem Wort '{'
'/installMiniEnv.sh:Zeile 24: ' {


Was mich stark irritiert, da die Betriebsystemja gleichsein solten beide in einer Virtuellen Box und beide aus dem gleichem Iso installiert. Ausserdem beide frisch installiert.
Hier ist dann der Skript Kode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env bash
#aktuell13
# Skrip zum einrichten eines Linux auf eine virtuellen Maschine um mit dem #Minidisplay zu arbeiten.
#Komandozeilenparameter: keine # 
#Dateien die mit dem Skript im Ordner liegen müßen:
# Archives1.tar.gz 
# Archives2.tar.gz 
# netdcu8-bsp-1.4.tar.gz 
# netdcu8-bsp-x.y-targetfs.tar.gz
# qt-embedded-linux-opensource-src-4.5.1.tar.gz  
# qt-x11-opensource-src-4.5.1.tar.gz
# qt-sdk-linux-x86-opensource-2010.05.bin
# eclipse-cpp-helios-SR1-linux-gtk.tar.gz
# boost_1_44_0.tar.gz
#hterm
# -e datei Exists
# -d Directory exists
# -x ausführbare Datei existiert
#
readonly LINUUXPWD="linux"
#Urspruenglichen ausführungspfad bekommen.
function getRelativeScriptPath
{
	local readonly bash_source=$1
	local readonly prog_name=$2
	local relativepath
	if [ "x$bash_source" = "x" ]; then
    	relativepath=$prog_name
	else
    	relativepath=$bash_source
	fi
	echo "$(dirname "$relativepath")"
}
function getAbsolutePath
{
	local readonly relativepath=$1
	echo "$(cd "${relativepath}" 2>/dev/null; echo "$(pwd)")"
}
function getAbsoluteScriptPath
{
	getAbsolutePath "$(getRelativeScriptPath $@)"
}

hiernach folgt dann die installation denke aber nicht dasder fehler da drin liegt

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Phaeraun« (07.08.2012, 16:18)


2

26.07.2012, 15:22

denke aber nicht dasder fehler da drin liegt
Wieso nicht?
Immerhin liegt Zeile 24 in einer Funktionsdeklaration und diese Funktion muß ja von irgendwo aufgerufen werden. Die Fehlermeldung deutet darauf hin, daß eine Variable falsch oder unsauber gesetzt sein dürfte.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »Phaeraun« ist der Autor dieses Themas

Beiträge: 4

Registrierungsdatum: 26.07.2012

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

3

30.07.2012, 08:25

hm ja diese Zeile hätte ich noch angeben sollen.Die folgt direkt auf das obere.


Quellcode

1
readonly SCRIPT_PATH="$(getAbsoluteScriptPath "${BASH_SOURCE[0]}" "${0}")"


Ich gehe davon aus, dass der Fehler nicht im nachfolgenden Bereich liegt, da der eigenständig läuft.

  • »maettu« ist männlich

Beiträge: 3 299

Registrierungsdatum: 14.09.2005

Derivat: Xubuntu

Architektur: 64-Bit PC

Desktop: XFCE

  • Nachricht senden

4

30.07.2012, 09:30

Zitat

Ich gehe davon aus, dass der Fehler nicht im nachfolgenden Bereich liegt, da der eigenständig läuft.
Wenn du dir ja sicher bist, wieso musst du fragen ;)

Aber ich denke du musst dir jeden Aufruf der Funktion "getRelativeScriptPath" anschauen, irgendwo wird da etwas mit einem Parameter dieser Funktion nicht ganz richtig gemacht.

  • »Phaeraun« ist der Autor dieses Themas

Beiträge: 4

Registrierungsdatum: 26.07.2012

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

5

30.07.2012, 10:34

Hm gut 100% Sicherbin ich mir nicht, das kann man ja nie sein, aber was die Funktion angeht habe ich nur diesen einen Aufruf den ich oben mitlerweile gepostet habe.
danach werden nur noch ein paar Einträge bei den Netzwerkeinstellungen gemacht und dann wird das Script in Autostart eingetragen und der Rechner dann neu gestartet. Worauf das Script ein anderes Script aufruft.
Es irritiert mich halt vorallem das es in der einen virtuellen Maschine wunderbar funktioniert hat und in der andern überhaupt nicht will.

  • »floogy« ist männlich

Beiträge: 3 071

Registrierungsdatum: 10.03.2005

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 3.0

Andere Betriebssysteme: debian

  • Nachricht senden

6

30.07.2012, 14:36

Du könntest das hier an den Anfang Deines Skriptes setzen

Quellcode

1
2
3
4
#!/bin/bash
LC_NUMERIC=C
LC_ALL=C
export PS4='\010$(printf "% 4d" $LINENO)\011-> ' #debug


und das Skript mit

Quellcode

1
bash -x <skript>

ausführen.

siehe auch:
http://tldp.org/LDP/Bash-Beginners-Guide…sect_02_03.html
http://aymanh.com/how-debug-bash-scripts
http://bashdb.sourceforge.net/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »floogy« (30.07.2012, 16:03)


7

31.07.2012, 00:10

Wenn man das ganze Script nicht vor sich hat, ist es schwer zu debuggen. Die vielen Sprünge und Rücksprünge im Code, die kryptisch-langen Variablennamen und die etwas unorthodoxe Verwendung von Quotes und Braces machen's auch nicht gerade einfacher.
Aber zumindest eine potentielle Fehlerstelle kann ich ausmachen, und die hätte auch mit der Funktion "getRelativeScriptPath" zu tun.
Da wir jetzt, dank deiner nachgelieferten Zeile, wissen, daß ihr zwei Variablen übergeben werden, ergibt sich folgendes:
Die Funktion prüft, ob die erste Variable leer ist und verwendet in diesem Fall die zweite Variable. Ansonsten eben die erste. (klingelt schon was?)
Okay, wenn die erste übergebene Variable leer ist, dann ist die zweite Variable die erste und es gibt gar keine zweite. Nicht nur, daß dein Script dann mit genau der falschen Variable weiterlaufen würde. Das könnte auch die beschriebene Meldung auslösen.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »Phaeraun« ist der Autor dieses Themas

Beiträge: 4

Registrierungsdatum: 26.07.2012

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 2.x

  • Nachricht senden

8

07.08.2012, 16:18

Problem gelöst , hatte Windowszeichen in der Scriptdatei und deshalb gings nicht.
Aber danke fürs drüber Nachdenken.

  • »floogy« ist männlich

Beiträge: 3 071

Registrierungsdatum: 10.03.2005

Derivat: Ubuntu

Architektur: 64-Bit PC

Desktop: GNOME 3.0

Andere Betriebssysteme: debian

  • Nachricht senden

9

07.08.2012, 16:53

Ja, stimmt, ein beliebter Fehler bei mir, wenn ich unter cygwin (POSIX Unix Umgebung mit GNU Tools für Windows) mit notepad++ skripte. Das legt erst mal ANSI CR+LF Windows Textdateien an, die dann auch kryptische Fehlermeldungen in der bash produzieren. Oft vergesse ich das beim ersten Test des Skriptes und stehe erst mal dumm da, bis es mir wieder einfällt...

EDIT, gerade unter Voreinstellungen in notepad++ geändert auf utf8,UNIX und Shell.