• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Befehle über Terminal werden abgeschnitten, auch in Shellscripts

lukelukeluke

Golden Delicious
Registriert
10.09.08
Beiträge
7
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!
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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
 

lukelukeluke

Golden Delicious
Registriert
10.09.08
Beiträge
7
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?
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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
 

lukelukeluke

Golden Delicious
Registriert
10.09.08
Beiträge
7
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".
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
Was für Möglichkeiten hast Du denn die Dateien auf den entfernten Server zu schieben? FTP, SSH…
Gruß Pepi
 

lukelukeluke

Golden Delicious
Registriert
10.09.08
Beiträge
7
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...
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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
 

lukelukeluke

Golden Delicious
Registriert
10.09.08
Beiträge
7
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..
 

pepi

Cellini
Registriert
03.09.05
Beiträge
8.740
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