1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Befehle über Terminal werden abgeschnitten, auch in Shellscripts

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von lukelukeluke, 10.09.08.

  1. lukelukeluke

    lukelukeluke Golden Delicious

    Dabei seit:
    10.09.08
    Beiträge:
    6
    Hallo,

    Ich habe das Problem, dass im Terminal nach der Standardgrösse einfach abgeschnitten wird.
    Beispiel: Befehl: ps -aux
    Auch der Befehl ps -aux > ~/Desktop/psaux.txt schreibt nur den Output von ps -aux in die Datei, welcher im aktuellen Terminal platz hat, also auch abgeschnitten. Somit ist es mir gar nicht möglich, die gesamte Ausgabe anzusehen?

    Das ist eigentlich nicht weiter schlimm, dient nur als Anschauung. Was schlimm ist:
    Ich arbeite an einem Shell-Skript, in welchem eine Dateiliste generiert wird, welche danach abgearbeitet werden soll. Das Skript sieht in etwa so aus:
    Code:
    #!/bin/sh
    #
    find /path/to/files > /path/to/filelist
    for FILE in `cat /path/to/filelist`
    do
            echo "processing $FILE"
    done
    Das Skript schreibt also Dateinamen in eine Datei (funktioniert problemlos). Danach wird mit cat die Liste ausgelesen, wo genau das Problem besteht: "cat" schneidet auch die Zeilen auf Standard-Terminalgrösse ab.

    Ist das mit dem Abschneiden bei euch auch? Bin auf 10.4.11... Das Phänomen tritt sogar auf einer frisch installierten 10.4.11er Kiste auf!!!
    Auf Linux hatte ich solche Probleme nie :(

    Danke für eure Hilfe!
     
  2. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Rtfm!

    Zitat aus man ps

    Code:
         -w      Use 132 columns to display information, instead of the default
                 which is your window size.  If the -w option is specified more
                 than once, ps will use as many columns as necessary without
                 regard for your window size.  When output is not to a terminal,
                 an unlimited number of columns are always used.
    
    Gruß Pepi
     
  3. lukelukeluke

    lukelukeluke Golden Delicious

    Dabei seit:
    10.09.08
    Beiträge:
    6
    Danke für deine Antwort pepi. Das brinbgt aber nichts für "cat"...
    Ich schreibe gerade ein Skript für mein Apple Mail. Eigentlich will ich alle Dateien im Ordner "~/Library/Mail" durchgehen. Der Befehl mit find um alle Dateinamen in eine Datei zu schreiben funktioniert perfekt. Aber danach das auslesen: Hier wird bei cat einfach jede Zeile abgeschnitten, wenn sie zu lang ist. Nur mit dem Aufruf cat /tmp/filelist_names auf dem Terminal gehts, jedoch nimmt er im Shellskript komischerweise die Terminal Standardbreite???

    Folgendes Skript sollte genügen, um das Problem zu illustrieren:
    Code:
    #!/bin/sh
    #
    find ~/Library/Mail > /tmp/filelist_names
    
    for FILE in `cat /tmp/filelist_names`
    do
            echo "--> $FILE"
    done
    Hat sonst noch wer ne Idee?
     
  4. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Wenn Du die Liste nur das eine mal brauchst dann ist das eine klassische useless use of cat. Man könnte Dein Beispiel auf eine einzige Zeile reduzieren aber um Optimiereungen gehts hier ja nicht.

    Was möchtest Du schlußendlich erreichen? Was ist das Ziel Deine Skriptes?
    Gruß Pepi
     
  5. lukelukeluke

    lukelukeluke Golden Delicious

    Dabei seit:
    10.09.08
    Beiträge:
    6
    Das Ziel war eigentlich, Inhalt des Mail-Ordners zu indexeren und zu sichern (auf einem Remote-Server). Wollte ein kleines Programm dafür schreiben, dass u.A. mit Shellscripts arbeitet. Eigentlich bräuchte ich dafür schon ein Skript, welches mit einer while-Schleife ein Verzeichnis durchläuft. "find" mit "-exec" ist mir ein bischen zu "schmalspur".
     
  6. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Was für Möglichkeiten hast Du denn die Dateien auf den entfernten Server zu schieben? FTP, SSH…
    Gruß Pepi
     
  7. lukelukeluke

    lukelukeluke Golden Delicious

    Dabei seit:
    10.09.08
    Beiträge:
    6
    FTP, SSH & scp, Samba per SSH-Mount, ...
    Eigentlich wollt ich ein eigenes Programm für den Datenaustausch schreiben... Aber es geht ja nicht darum, sondern ich will generell wissen wie das geht, nicht ein workaround. Es mus doch eine Möglichkeit geben um ein Verzeichnis abzuarbeiten...
     
  8. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Für den Zweck des Kopierens ist es Unsinn manuell durch den Tree zu wandern. Das können Tools wie curl (für FTP) und scp und rsync (für SSH) schon komplett alleine. Auch für cat wäre eine Wildcard wohl passender als ein manuelles Tree walken.

    rsync -avz -pl --rsh=ssh --delete-after --compress --progress --stats path/to/local/source/folder user@host:/path/to/destination/folder/on/remote/server


    Das schiebt Dir beispielsweise den gewünschten Ordner auf Deinen entfernten Server per rsync über ssh.

    Für FTP könntest Du das mit wget machen. (Ist beim Mac aus Lizenzgründen nicht dabei, kann man aber simpelst von Source compilen.)

    Was meinst Du mit "indizieren"? Über Spotlight oder mit einem anderen Tool? (So wie das bisher für mich aussieht, dürfte sich das nämlich mit einem Einzeiler lösen lassen.)
    Gruß Pepi
     
  9. lukelukeluke

    lukelukeluke Golden Delicious

    Dabei seit:
    10.09.08
    Beiträge:
    6
    Das mit rsync ist auf jedenfall interessant! Vielen Dank das du imernoch dran bist bei meinem Problem :)
    Mittlerweile brauche ich das Programm gar nicht mehr schreiben. Wollte das weil ich 2 Macs habe (seit neuem ein MBP gekauft). Das gefällt mir aber jetzt so gut, dass ich den alten G4 gar nicht mehr brauche - das Programm zu schreibne ist also nicht mehr nötig. Rsync hab ich schon zum Resume von scp-uploads benötigt - gut zu wissen das es auch Verzeichnisse spiegeln kann.

    Trotzdem wüsste ich aber auch noch gerne meines ursprünglichen Problems Lösung. Auf meinem Linux Server habe ich nähmlich einige solche Skripte - vielleicht schreib ich auf Mac auch mal sowas - eigentlich müsste dies auf der Shell doch gleich funktionieren..
     
  10. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Du kannst mit rsync nicht nur sco Transfers versollständigen. Du kannst den Transfer auch gleich per rsync machen. Dann mußt im Falle eines Verbindungsabbruches nur den letzten Befehl wiederholen, und fertig machen lassen. rsync ist ein bissl ein Steckenpferd von mir, weil es wirklich einextrem praktisches Tool ist, sowohl als Ersatz für cp als auch für scp, lokal und remote, der gar double remote.

    Meine Backup-Software mlbackup basiert auch auf rsync. Kannst Du Dir kostenlos runterladen!

    Die meisten Skripte werden mit ein paar Anpassungen durchaus auch auf anderen Systemen laufen, je nachdem welche Shell Du halt verwendest. Auch bei einigem Befehlen wirst Du die eine oder andere Option anpassen müssen. Aber grundsätzlich sind die meisten Shell-Skripte (speziell die kürzeren kleinen Helferleins und Einzeiler) sehr portbel.
    Gruß Pepi
     

Diese Seite empfehlen