Perl systemcall

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Tommy_WY, 16.04.2010.

  1. #1 Tommy_WY, 16.04.2010
    Tommy_WY

    Tommy_WY Mitglied

    Dabei seit:
    03.06.2008
    Beiträge:
    28
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe mal wieder ein kleines Problem.

    Ich habe ein kleines Perlscript geschrieben, um Dateien zu manipulieren.
    Diese Daten habe ich mir aus dem CVS ausgecheckt.
    Nach der Manipulation möchte ich die Dateien gerne wieder ins CVS einchecken.
    Und genau da liegt mein Problem.
    Ich habe keine Ahnung, ob ich das unter Perl direkt machen kann oder nicht.
    Mein erster Gedankengang war demnach ein system oder qx Aufruf von Unix.
    Dummerweise benötigt aber der CVS-Client aus der Unixkommandozeile zunächst eine Variable namens CVSROOT. Ich muss also erst der Shell die Variable verabreichen und danach kann ich erst an ein cvs commit und/oder cvs tag denken.

    Kann ich in einem system mehrere Unixbefehle absetzen?
    Im Prinzip so:
    Code:
    system ("ls -ltr
    cd irgendwas
    mkdir nochwasandres");
    Oder spezieller
    Code:
    system ("CVSROOT=$cvspath
    cvs commit dat1 dat2
    cvs tag dat1 dat2");
    Ich habe nicht wirklich was bei cpan gefunden, was direkt aus Perl funzt.

    I need :hilfe2:

    Grüsse Tommy
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gott_in_schwarz, 16.04.2010
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    $ perl -e '$ENV{foo} = "bar"; system q{ echo $foo }'
    bar
    Siehe auch:
    Code:
    $ perldoc perlvar|less -pENV
    Du kannst mehrere Kommandos inner Shell durch Semicolen (Plural von Semicolon?) trennen.

    Was ist hiermit?
     
  4. #3 Tommy_WY, 16.04.2010
    Tommy_WY

    Tommy_WY Mitglied

    Dabei seit:
    03.06.2008
    Beiträge:
    28
    Zustimmungen:
    0
    Hi,

    ah, also über ein ";", das ist gut. Ans Enivroment hab ich auch schon gedacht, zumindest für die Variable.

    Bei meiner Suche mit dem ppm und der Eingabe cvs, hat mir der ppm das Package nicht angezeigt. Das sieht auf den ersten Blick ganz gut aus.

    Ich schau es mir morgen an. Wir haben Releasewechsel WE und dann muss ich eh hier rein kommen.

    Danke danke
     
  5. #4 Gott_in_schwarz, 16.04.2010
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    CPAN Suche nach "cvs"
    So als Tip zum Module-Suchen.
     
  6. #5 bitmuncher, 16.04.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Um sicherzustellen, dass die Befehle wirklich nacheinander abgearbeitet werden und abgebrochen wird, wenn ein Befehl fehlschlägt, kann man diese auch mittels && verknüpfen.

    Code:
    system("befehl1 && befehl2");
    Im Prinzip ruft ja system() nur eine Shell auf, in deren Kontext dann die Befehle abgearbeitet werden. Somit kann innerhalb von System alles verwendet werden, was man auch von der Kommandozeile der Shell kennt.
     
  7. #6 Tommy_WY, 17.04.2010
    Zuletzt bearbeitet: 17.04.2010
    Tommy_WY

    Tommy_WY Mitglied

    Dabei seit:
    03.06.2008
    Beiträge:
    28
    Zustimmungen:
    0
    Klar, aber das gleiche Ergebnis sollte auch der ppm liefern, oder?
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hi @ all,

    ich habe jetzt beides versucht. Semikolon als Befehlstrenner und &&. Beides hat nicht funktioniert.
    $ENV hat auch nicht gezogen. Die Variable wird zwar gesetzt, aber bei system zieht sie nicht.

    Gruss
    Tommy
     
  8. #7 Gott_in_schwarz, 17.04.2010
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    You are mistaken:
    Code:
                   The hash %ENV contains your current environment.  Setting a
                   value in "ENV" changes the environment for any child processes
                   you subsequently fork() off.
    
    Ja, diese Fehlermeldung ist ziemlich häufig.


    Kannst du Gründe dafür angeben warum dies der Fall sein sollte außer "Darum."?

    Btw, wenn du activeperl unter windows benutzt solltest du das angeben, weil system() wie gesagt bei Auffinden von shell-Metazeichen im Argument eine shell forkt.

    Ansonsten würde ich dir einfach dazu raten die cvs-Aufrufe in einem shell-Skript auszuführen und nur die Textverarbeitung mittels perl zu machen.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Tommy_WY, 19.04.2010
    Tommy_WY

    Tommy_WY Mitglied

    Dabei seit:
    03.06.2008
    Beiträge:
    28
    Zustimmungen:
    0
    Weil ich einfach erwarte, dass der Suchstring gleich funktioniert. Aber egal, sei es wie es ist. Ich habe deinen Rat befolgt und mache das ganze nun mit nem Shellscript und Parameterübergabe.
    Hat auch genau einmal funktioniert, seitdem zickt das blöde CVS rum und meldet mir ständig, es hätte PANIC.
    So langsam werde ich hier gaga. In meiner Firma wird glaube ich alles das eingesetzt, was bei dreckstools.de ganz vorn steht oder total veraltet ist. X( ?(

    Gruss
    Tommy
     
  11. #9 Gott_in_schwarz, 19.04.2010
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    von hier.

    Damit solltest du wissen, was du checken musst.
     
Thema:

Perl systemcall

Die Seite wird geladen...

Perl systemcall - Ähnliche Themen

  1. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  2. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...
  3. Perl: 20 Jahre CPAN

    Perl: 20 Jahre CPAN: Vor 20 Jahren wurde das erste Modul in das Comprehensive Perl Archive Network (CPAN) hochgeladen, woran Neil Bowers mit einem Abriss der...
  4. Perl 5.22.0 freigegeben

    Perl 5.22.0 freigegeben: Die neue Version 5.22 von Perl bringt den Anwendern mehr Sicherheit bei Eingabedateien, Unicode 7.0 und zahlreiche weitere Verbesserungen....
  5. [Perl] Perl OO Methodenaufruf in anderem Objekt

    [Perl] Perl OO Methodenaufruf in anderem Objekt: Hallo, Ich bin dabei in Perl ein Pokerspiel zu programmieren, hänge aber momentan an einem Problem, wo ich nicht weiterkomme. Ich habe die...