Mischa: Systemaufrufe über Perl

Hi,

ich möchte ein Script ausführen, dass ein Verzeichnis als tar.bz2 bastelt und danach das Verzeichnis löscht. Währenddessen soll das Script aber weiterlaufen.

Es lief soweit, dass er mir das tar gemacht hat und weiterlief. Allerdings funktionierte das Löschen nicht, weil er es während des anderen Prozesses gleichzeitig machte und das tar packen schief ging.

Bisher:

system "tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null;rm -rf dirb/to/backup &> /dev/null";

Ich habe leider keine Idee mehr.

  1. Moin!

    system "tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null;rm -rf dirb/to/backup &>
    Ich habe leider keine Idee mehr.

    Aber ich.

    [1] Baue ein Shell-Skript: (theshellskript.sh)

    !# /bin/sh
    tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null;rm -rf dirb/to/backup &> /dev/null
    rm -r dirb/to/backup
    exit

    [2] vergesse nicht, es ausführbar zu machen
    chmod 755 theshellskript.sh

    und rufe es im Perl- Skript auf:

    system "theshellskript.sh";

    geht auch ohne chmod (und ohne shebang):

    system "sh < theshellskript.sh";

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Moin!

      Moin!

      Ich mal wieder...

      Eine Shebang beginnt natürlich mit einem Kommentarzeichen, gefolgt von einem Ausrufezeichen, einem Leerzeichen und dann dem Pfad zum Interpreter:

      #! /bin/sh

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
      1. Moin!

        Ich hab noch was entdeckt: zu ersten hattest Du das Löschen schon in der Zeile drin. Offensichtlich wirkt:

        system (kommando_1; kommando_2);
        wie:
        system (kommando_1);
        system (kommando_2);

        #! /bin/sh
        tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null
        rm -r dirb/to/backup &> /dev/null
        exit

        Zum zweiten solltest Du wohl auch Fehlermeldungen irgendwo loggen und sicherstellen, dass es das Verzeichniss überhaupt gibt.

        #! /bin/sh

        Packt das Verzeichnis dirb/to/backup nach file.tar.bz2 und löscht es

        if test -d dirb/to/backup
        then
          tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null 2> /dir/my_error_log
          rm -r dirb/to/backup &> /dev/null 2>/dir/my_error_log
        else
          echo  "dirb/to/backup ist nicht existent oder kein Verzeichnis" > /dir/my_error_log
        fi
        exit

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Moin!

    system "tar cjvfP /dir/file.tar.bz2 dirb/to/backup &> /dev/null

    Bliebe noch eine Frage.
    Warum weisst Du tar an geschwätzig zu sein (-v = "verbosely list files processed" ) um dann die Ausgaben nach /dev/null zu senden?

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. ööhhm gute Frage :)

      War eigentlich nur zum debuggen...

      1. Moin!

        War eigentlich nur zum debuggen...

        Ich vermute, der Tip mit de, Shell- Skript hat geholfen?

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Jau, bestens. Läuft jetzt wie geschmiert.

          Danke