amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Cygwin: Skripte und Variablen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

23.09.2011, 15:28 Uhr

DrNOP
Posts: 4118
Nutzer
Schalut schuschammen.

Ich habe einmal mehr ein Problem mit Parametern und suche mir bereits 'nen Wolf...

Das Problem:
Ich habe in einer cygwin-Umgebung ein Skript, das in unterschiedlichen Verzeichnissen liegen kann. Dieses Skript soll unter anderem eine Datei per ftp übertragen, die in einem Unterverzeichnis relativ zum aufrufenden Skript liegt.

Für die ftp-Übertragung selbst habe ich mir ein anderes Skript gemacht, in dem die ganzen Zugangsdaten etc. abgelegt sind. Dieses Skript wird vom ersten aufgerufen, um die ftp-Übertragung auszuführen.

Bisher habe ich das zweite Skript immer manuell in das Verzeichnis kopiert, in dem die aktuell zu übertragende Datei liegt. Das wird mir aber mit der Zeit zu lästig. Deshalb dachte ich, ich lege dieses Skript an einen festen Platz und übergebe ihm als Parameter das Verzeichnis aus dem heraus es aufgerufen wurde, damit es die Datei findet die es übertragen soll.

Die Fragen, die ich bis jetzt vergeblich an Gurgel gestellt habe sind:
- Wie kriege ich den Pfad zum aktuellen Verzeichnis in eine Variable?

Oder alternativ:
- Wie kriege ich die ftp-Übertragung in eine Zeile, damit ich das zweite Skript überhaupt nicht mehr brauche und halt nur eine Zeile im ersten Skript von Fall zu Fall anpassen muß?

Oder alternativ:
- Andere Vorschläge, wie ich das Problem erschlagen kann?
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

26.09.2011, 17:24 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DrNOP:
Die Fragen, die ich bis jetzt vergeblich an Gurgel gestellt habe sind:
- Wie kriege ich den Pfad zum aktuellen Verzeichnis in eine Variable?

Der ist doch schon in einer Variablen (namens PWD).
Zitat:
Oder alternativ:
- Wie kriege ich die ftp-Übertragung in eine Zeile, damit ich das zweite Skript überhaupt nicht mehr brauche und halt nur eine Zeile im ersten Skript von Fall zu Fall anpassen muß?

Schwer zu sagen, da ja nicht mal klar ist, wieso Du zwei Skripte brauchst, bzw. warum Du derzeit mehr als eine Zeile für’s FTP benötigst.

Mehr Informationen könnten da nicht schaden.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

26.09.2011, 18:24 Uhr

DrNOP
Posts: 4118
Nutzer
Zitat:
Original von Holger:
Zitat:
Original von DrNOP:
Die Fragen, die ich bis jetzt vergeblich an Gurgel gestellt habe sind:
- Wie kriege ich den Pfad zum aktuellen Verzeichnis in eine Variable?

Der ist doch schon in einer Variablen (namens PWD).
Das ist mir zwar soweit bekannt, ist ja aber weder der Pfad wo die Datei mit den ftp-Parametern zu finden ist noch der Pfad wo die zu übertragende Datei zu finden ist. Ich will den jetzt aktuellen Pfad aufheben, damit ich auch nach einem oder mehreren Verzeichniswechseln den hiesigen Inhalt ggf. übertragen kann.
Mit pushd und popd wird er ja nur aufgehoben, damit ich später wieder dahin zurückwechseln kann.

Zitat:
Zitat:
Oder alternativ:
- Wie kriege ich die ftp-Übertragung in eine Zeile, damit ich das zweite Skript überhaupt nicht mehr brauche und halt nur eine Zeile im ersten Skript von Fall zu Fall anpassen muß?

Schwer zu sagen, da ja nicht mal klar ist, wieso Du zwei Skripte brauchst, bzw. warum Du derzeit mehr als eine Zeile für’s FTP benötigst.
Weil's Internet das so gesagt hat, wie z.B. hier:
http://www.schmittis-page.de/index.html?/www/t8.htm

Wobei das nicht ganz die Seite war, die ich damals als Anleitung hatte. Mein Skript für diesen Zweck sieht so aus:
bash code:
#!/bin/bash
ftp -v -n "154.2.3.65" << cmd
user "xxx" "xxx"
cd /cfcard0
lcd boot
bin
put blafasel-datei
lcd ..
quit
cmd


--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 10:49 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DrNOP:
Das ist mir zwar soweit bekannt, ist ja aber weder der Pfad wo die Datei mit den ftp-Parametern zu finden ist noch der Pfad wo die zu übertragende Datei zu finden ist. Ich will den jetzt aktuellen Pfad aufheben, damit ich auch nach einem oder mehreren Verzeichniswechseln den hiesigen Inhalt ggf. übertragen kann.

Vielleicht habe ich etwas zu viel vorausgesetzt.

Für die Bash gilt:

Mit
FOO = $PWD
erzeugst Du eine Variable namens FOO mit dem momentanen Inhalt von PWD, also dem aktuellen Verzeichnis.

Wenn Dein Skript allerdings überschaubar klein ist und nur einen einzigen Verzeichniswechsel enthält, brauchst Du auch das nicht, die Variable OLDPWD enthält bereits das vorhergehende Verzeichnis.

Zitat:
Mein Skript für diesen Zweck sieht so aus:
bash code:
#!/bin/bash
ftp -v -n "154.2.3.65" << cmd
user "xxx" "xxx"
cd /cfcard0
lcd boot
bin
put blafasel-datei
lcd ..
quit
cmd


Das sieht doch ganz nett aus. Aber welchen Unterschied macht es jetzt, ob es so wie da oben aussieht oder in einer einzigen Zeile steht?

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 13:52 Uhr

DrNOP
Posts: 4118
Nutzer
Zitat:
Original von Holger:
Vielleicht habe ich etwas zu viel vorausgesetzt.

Schien mir auch so ...
... war mir aber fast klar, als ich das Thema eröffnet habe.

Zitat:
Mit
FOO = $PWD
erzeugst Du eine Variable namens FOO mit dem momentanen Inhalt von PWD, also dem aktuellen Verzeichnis.

die Variable OLDPWD enthält bereits das vorhergehende Verzeichnis.

Siehste, das zum Beispiel hat mir gefehlt. Und mit den diversen Sonderzeichen, die ich zur Auswahl habe (wie $," " oder ' ', manchmal auch Kombinationen davon) um das zu erreichen was ich will, bin ich eh' überfordert.

Zitat:
Aber welchen Unterschied macht es jetzt, ob es so wie da oben aussieht oder in einer einzigen Zeile steht?
Woher soll ich das wissen? Es soll Programmiersprachen geben, die das Ende eines Befehls am Zeilenende erkennen ...
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 15:28 Uhr

Thore
Posts: 2266
Nutzer
@DrNOP:
Wegen den Sonderzeichen:
http://www.rasger.de/linux/sonderzeichen.htm
Mit der Zeit hast du das schnell drauf.
Wegen den Mehrzeiligen... Wenns tut dann tuts :)

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 16:48 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von DrNOP:
Mein Skript für diesen Zweck sieht so aus:
bash code:
#!/bin/bash
ftp -v -n "154.2.3.65" << cmd
user "xxx" "xxx"
cd /cfcard0
lcd boot
bin
put blafasel-datei
lcd ..
quit
cmd


Holger ist ein bisschen kryptischer als er sein müsste, vermutlich will er dieses Mann-hab-ich-mehr-Ahnung-als-du-Gefühl noch ein bisschen genießen ;)

Das was du da gepostet hast, ist kein Skript - sondern im Grunde genommen nur ein einziger Befehl ("ftp"). Der Teil zwischen "<< cmd" und "cmd" ist nur eine Liste mit Argumenten, die nach und nach dem FTP-Befehl übergeben werden wenn er nach Input fragt.

Wären es normale Shell-Befehle, könntest du beispielsweise den Zeilenumbruch durch " && " ersetzen, das bedeutet soviel wie "wenn vorheriger Befehl erfolgreich, führe nächsten Befehl aus". Aber ich glaube nicht, dass das hier auch funktioniert.

Was dagegen funktionieren müsste, ist den Input schlicht aus einer Datei zu lesen, anstatt ihn dem FTP-Befehl in Klartext mitzugeben. du fügst also in dein erstes Skript folgenden Befehl ein:

ftp -v -n "154.2.3.65" -s:LISTE_MIT_BEFEHLEN_FUER_FTP.TXT

("-s:" teilt dem FTP-Befehl mit, die Befehle aus einer Datei zu lesen)

Das zweite Skript brauchst du nicht mehr, der Inhalt von LISTE_MIT_BEFEHLEN_FUER_FTP.TXT (das du natürlich hinkopieren kannst wo du willst), sieht logischerweise so aus:

code:
user "xxx" "xxx"
cd /cfcard0
lcd boot
bin
put blafasel-datei
lcd ..
quit


[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 16:58 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von cgutjahr:
put blafasel-datei

Mist - merke gerade dass diese Lösung natürlich quatsch ist, da sich "blafasel-datei" ja jedesmal ändert.

Man könnte einen Softlink anlegen, der dann vom Skript so geändert wird dass er auf die gewünschte Datei zeigt. Ist aber natürlich nicht besonders elegant. Warten wir mal auf andere Lösungsvorschläge.

Ach ja: Das habe ich schon richtig verstanden, dass du die Zugangsdaten und Skript1 getrennt haben willst und deswegen nicht einfach alles in ein Skript packst?

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 21:45 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von cgutjahr:
Holger ist ein bisschen kryptischer als er sein müsste, vermutlich will er dieses Mann-hab-ich-mehr-Ahnung-als-du-Gefühl noch ein bisschen genießen ;)

Nein, ich meinte im Grunde exakt das, was Thore schrieb:
Zitat:
Original von Thore:
Wegen den Mehrzeiligen... Wenns tut dann tuts :)



Zitat:
Original von cgutjahr:
Ach ja: Das habe ich schon richtig verstanden, dass du die Zugangsdaten und Skript1 getrennt haben willst und deswegen nicht einfach alles in ein Skript packst?

Nein, das hast Du falsch verstanden.

Siehe Threaderöffnung:

Zitat:
Original von DrNOP:
Oder alternativ:
- Wie kriege ich die ftp-Übertragung in eine Zeile, damit ich das zweite Skript überhaupt nicht mehr brauche und halt nur eine Zeile im ersten Skript von Fall zu Fall anpassen muß?


Er will keine zweite Datei haben. Warum er allerdings nicht einfach den Inhalt der zweiten Datei in die erste einfügt, statt sie aufzurufen, bzw. warum es in diesem Zusammenhang eine Rolle spielen soll, ob diese Datei aus einer oder mehreren Zeilen besteht, erschließt sich mir nicht. Deshalb habe ich nachgefragt.

Ich könnte natürlich auch einen Haufen Informationen über Shell-Programmierung in den Raum stellen und es dem Zufall überlassen, ob das richtige dabei ist. Das ist aber nicht meine Art.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

27.09.2011, 21:59 Uhr

DrNOP
Posts: 4118
Nutzer
Zitat:
Original von Holger:
Er will keine zweite Datei haben. Warum er allerdings nicht einfach den Inhalt der zweiten Datei in die erste einfügt, statt sie aufzurufen, bzw. warum es in diesem Zusammenhang eine Rolle spielen soll, ob diese Datei aus einer oder mehreren Zeilen besteht, erschließt sich mir nicht.

Das erste Skript wird in größerem Kontext verwaltet, sprich: Das ist für alle Benutzer gleich. Allerdings sind die anderen Benutzer - im Gegensatz zu mir - nicht der Meinung, daß es einfacher sei die ftp-Übertragung gleich zu integrieren. Deshalb wirft jeder nach Ausführen des Skripts noch seinen Filezilla mit seinen persönlichen Zugangsdaten an.

Ich habe also den moralischen Konflikt, eine Datei zu verändern die für alle gleich sein soll - und ich habe das Problem, daß ich diese Änderung ggf. in eine neue Version der Datei übernehmen muß. Deshalb möchte ich diese Änderung wenn's geht auf eine Zeile beschränken.

--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

28.09.2011, 09:30 Uhr

Thore
Posts: 2266
Nutzer
Man könnte ein Script machen, welches den Inhalt des Verzeichnisses ausliest, und als Variable weiterverwendet. Also z.B. mit ls auslesen und mit sed und echo formatieren. Wie genau können wir erst sagen, wenn wir ein konkretes Beispiel haben.

Ist da nur eine Datei drin oder mehrere? Gibt es ein bestimmtes Schema wie die Datei heißt?

[ - Antworten - Zitieren - Direktlink - ]

28.09.2011, 13:41 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DrNOP:
Ich habe also den moralischen Konflikt, eine Datei zu verändern die für alle gleich sein soll - und ich habe das Problem, daß ich diese Änderung ggf. in eine neue Version der Datei übernehmen muß. Deshalb möchte ich diese Änderung wenn's geht auf eine Zeile beschränken.

Jetzt wird es verständlicher. Die Frage ist, legen die anderen Wert auf ein „hygenisch einwandfreies” Skript, sprich darf da nichts spezielles nur für Dich drinstehen oder reicht es, wenn Dein Part bei den anderen nichts tut?

In letzteren Fall reicht es, Deinen Part mit
code:
if false; then

...

fi

einzurahmen und er tut nichts mehr. Dann beschränkt sich Deine Anpassung in der Tat auf eine einzige Zeile, nämlich aus dem false ein true zu machen.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

28.09.2011, 15:02 Uhr

cgutjahr
Posts: 2782
[Administrator]
Zitat:
Original von Holger:
In letzteren Fall reicht es, Deinen Part mit
code:
if false; then

...

fi

einzurahmen
Eine ähnliche Idee hatte ich auch gerade: Er kann eine ENV-Variable setzen, und im Skript mittels if abfragen, ob sie gesetzt ist. Dann bräuchte er gar nichts mehr ändern, und jeder Benutzer könnte selbst entscheiden, ob er den FTP-Transfer automatisiseren will indem er die variable setzt.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Cygwin: Skripte und Variablen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.