[SHELL] eval /pfad/tueNichts?

furryhamster

Lt. Commander
Registriert
Okt. 2008
Beiträge
1.098
Hi,

ich ein Skript, welches aus einer Configdatei einen Pfad und einen Skriptaufruf realisiert. Diese Funktion möchte ich zweckentfremden.

Aktuell sieht ein Aufruf z.B. so aus:
Code:
eval /testfpad/meinSkript.ksh -t test -z wasAnderes

Statt dem Skriptaufruf möchte ich jetzt einen ssh Aufruf in der Config hinterlegen. Leider ist die Pfadangabe jetzt jedoch im Weg. Den ssh Aufruf habe ich so schon hinbekommen:
Code:
eval /./dummy | ssh Befehl

Meine Frage ist jetzt, was ich für das dummy angeben kann, damit ich nicht jedes mal eine Exception bekomme. Ein dummy.ksh Skript ohne Inhalt kann ich nicht zusätzlich anlegen.
 
Blöde Frage: Hat der eval Befehl an dieser Stelle einen besonderen Sinn? Warum nicht einfach
Code:
ssh Befehl
?
 
Das eval ist fester Bestandtteil des Skript und darf nicht verändert werden. Ich kann nur den Aufruf über Variablen steuern
eval $pfad/$skriptaufruf

Beides muss gesetzt werden und statt dem $skriptaufruf möchte ich einen ssh Aufruf starten
 
Jetzt habe ich es (glaube ich) verstanden.

Wie wäre es mit:

Code:
pfad=/usr/bin
aufruf=ssh

eval $pfad/$aufruf
 
Der ssh befehl wäre ja z. B. ssh x@y /pfad/meinskript.ksh
wenn jetzt die die eval Zeile aufgelöst wird, müsste die Zeile ja so aussehen:
Code:
eval /pfad/ssh x@y /pfad/meinskript.ksh/CODE]

In dem Moment wird er mir ja ausgehen, dass er die Datei ssh nicht finden kann denke ich. Aus diesem Grund war mein Ansatz  einen Weg zu finden statt einer Dateiangabe "nichts" zu tun und dann mittels pipe den ssh aufruf zu machen.

"aufruf" müsste dann lauten:
[CODE]tueNichts | ssh x@y /pfad/meinskript.ksh

Nur dieses "tueNichts" habe ich noch keine Möglichkeit für gefunden.
 
Ich hab das Problem auch nicht völlig verstanden. Wie sieht denn die Zeile ohne ersetzte Variablen aus?

Ansonsten, eval bricht nicht ab bei einem Fehler. Der zweite Befehl (echo) wird trotz des Fehlers ausgeführt:
Code:
eval quatsch &> /dev/null; echo "blafasel"

Edit: Kommando zurück, bricht doch ab:
Code:
eval('quatsch &> /dev/null; echo "blafasel"')
 
Zuletzt bearbeitet:
Entweder stehe ich auf dem Schlauch, oder du hast dein Problem noch nicht vollständig erklärt.

furryhamster schrieb:
In dem Moment wird er mir ja ausgehen, dass er die Datei ssh nicht finden kann denke ich.
Wenn ICH bei MIR den Code aus Beitrag #4 ausführe, wird ssh gefunden und ausgeführt (die shell liest "/usr/bin/ssh"). Das habe ich ausprobiert und es geht. Das lässt sich noch mit Argumenten erweitern. Bitte erkläre, warum das nicht funktionieren soll.
 
Ich habs mir gerade noch einmal angeschaut. Du hast natürlich recht. Die Idee ist ziemlich clever und sollte so auch funktionieren. Ich hatte leider ein Detail vergessen zu erwähnen :(
Der exakte Jobaufruf sieht wie folgt aus:
Code:
eval ${instaldir}/${jobdir}/${aufruf}

Das Installdir kann über die genannte Config nicht gesteuert werden. Da die "tiefe" des Installdirs unterschiedlich sein kann, kann, kann ich hier denke auch nicht mit /.. arbeiten um zum Root-Pfad zu gelangen.

Wenn du noch eine Idee hast ist die gerne gesehen :)
 
Na dann funktioniert es doch wie oben beschrieben:
Code:
installdir="/opt/fest/vorgegeben"
jobdir="egal"
aufruf=" &> /dev/null; echo das geht"

eval ${installdir}/${jobdir}/${aufruf}

Den unerwünschten Teil nach /dev/null umleiten und mit Semikolon abtrennen. Danach folgt der gewünschte Befehl.
 
Zurück
Oben