FreeBSD Server - sed Problem

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von nepda, 14.05.2008.

  1. nepda

    nepda Foren As

    Dabei seit:
    04.09.2006
    Beiträge:
    77
    Zustimmungen:
    0
    Hallo,

    ich möchte einige Dateien (zu viele um sie von Hand zu bearbeiten) mit einem Script bearbeiten. Genauer von der aktuellen Kodierung in UTF-8 konvertieren.
    Dazu habe ich bisher folgendes zusammengeschrieben:
    Code:
    #!/bin/sh
    # charset.sh
    
    to="UTF-8"
    
    for i in `cat phpdateiliste.txt`; do
    	type=`file -i "$i" | sed 's/.*charset=\(.*\)$/\1/'`
    	iconv -f "$type" -t "$to" "$i" > "${i}.${to}"
    	echo "Type: $type"
    done
    auf meinem Lokalen System (Ubuntu) funktioniert das auch ohne Weiteres. Doch wenn ich das auf dem Server ausführe kommt eine Meldung:
    Code:
    # ../charsets.sh 
    ../charsets.sh: Cannot fork: Resource temporarily unavailable
    Type: 
    
    D.h. ich gehe davon aus, dass der Fehler im sed Befehl liegt. Jedoch wenn ich nur file -i /pfad/zu/einer/fixen/datei.php | sed 's/.*charset=\(.*\)$/\1/' ausführe, bekomme ich das Gewünschte.

    Ich habe leider nicht besonders viel Ahnung von Shell Scripten. Wo könnte der Fehler genau liegen, bzw. wie könnte ich das Problem umgehen?

    uname -a vom Server:
    Code:
    FreeBSD *** 6.2-RELEASE-p3 FreeBSD 6.2-RELEASE-p3 #3: Tue Mar 27 15:43:45 CEST 2007     *** amd64
    Vielen Dank!
     
  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 aspire_5652, 14.05.2008
    aspire_5652

    aspire_5652 Tripel-As

    Dabei seit:
    02.01.2008
    Beiträge:
    198
    Zustimmungen:
    0
    Glaub nicht, das es an sed liegt, wenn
    Code:
    file -i /pfad/zu/einer/fixen/datei.php | sed 's/.*charset=\(.*\)$/\1/'
    ausführbar ist.

    Ich hab hier mal eine Variante mit awk, vllt geht das:

    Code:
    file -i /pfad/zu/einer/fixen/datei.php | awk -F"charset=" '{print $2}'
     
  4. #3 Gott_in_schwarz, 14.05.2008
    Zuletzt bearbeitet: 14.05.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    /bin/sh ist in heutigen Systemen meist ein Link auf eine POSIX-Kompatible shell, nicht aber die bourne-shell selber. Bei ubuntu sollte es die dash sein. Poste mal Ausgabe von "ls -l /bin/sh". (Bei bsd ksh oder gar csh? *brrr*)

    Aber das sollte eigentlich nicht das Problem sein. (Ist aber trotzdem gut zu wissen.)

    Ich weiß nicht ob forken der korrekte Term dafür ist, aber command-substitutions (und pipes) werden ja in einer Subshell ausgeführt, welche die env-Vars der Eltern shell erbt. Und da du ja sagst, dass es ohne die backticks geht, wird da wohl der Hase im Pfeffer liegen (und niesen).

    Vielleicht liegst an "ulimit -u"? kA ehrlich gesagt, ich meine nur, das fork-Bomben in freebsd bei "oem-einstellung" (jaja, kein besseres Wort eingefallen...) nicht möglich sind. Aber da bombt ja forkig erstmal eh nix Großartiges in deinem Skript. Und das dir memory ausgeht um zwei subshells zu starten kann ich irgendwie auch nicht glauben ._.

    Eine Sache noch: type ist ein shell-builtin, also eine denkbar schlechte Wahl für einen Variablen-Namen (nimm lieber "from", das passt dann auch zu "to").
     
  5. nepda

    nepda Foren As

    Dabei seit:
    04.09.2006
    Beiträge:
    77
    Zustimmungen:
    0
    @aspire_5652: bei deiner Lösung bekomme ich den gleichen Fehler, nur bricht er die Schleife nach dem ersten Durchlauf ab.

    @Gott_in_schwarz: so ganz versteh ich nicht, was du sagen willst :think:
    Ich hab dir mal die Ausgaben:

    Code:
    # ls -l /bin/sh
    -r-xr-xr-x  1 root  www  131320 Mar 18  2007 /bin/sh
    
     - und -
    
    # ulimit -u
    5
    
    ahja, hab die Variable mal umbenannt in fromtype.... ändert nichts an der Sache.
     
  6. #5 Gott_in_schwarz, 14.05.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    # ulimit -u
    [b]5[/b]
    Ich wage die These aufzustellen, dass hier das Problem liegt.
    Mach mal "ulimit -a", dann siehst du auch, was der Wert von "ulimit -u" dir sagen will.
    Wie man den Wert dafür ändert entnehme bitte einer entsprechenden google-Suche.
    Die zu editierende Datei heißt zum Beispiel in ubuntu
    Code:
    /etc/security/limits.conf
    Könnt in freebsd genauso heißen, könnte auch wieder nicht.

    Ich hab auch nicht gesagt, dass das den Fehler verursacht. Ich habs nur als schlechten Stil angemerkt.
     
  7. nepda

    nepda Foren As

    Dabei seit:
    04.09.2006
    Beiträge:
    77
    Zustimmungen:
    0
    Hehe

    das ist gut, abgesehen davon, dass ich mich zur Zeit nichtmal am Server anmelden kann (per ssh):
    Received disconnect from [ip].[wird].[nicht].[verraten]: 2: fork failed: Resource temporarily unavailable
    glaube ich kaum, dass ich an diese Datei drankomme geschweige denn ändern darf. Bei dem Server handelt es sich um einen der Goneo Internet GmbH...
    Ich denke da hilft nur alle Dateien runterladen, konvertieren und wieder hochladen (ich frage mich eh grad, warum ich nicht schon viel früher auf diese Idee gekommen bin :headup:)

    Soweit mal vielen Dank an euch zwei!
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 whopper, 14.05.2008
    whopper

    whopper Foren As

    Dabei seit:
    01.10.2006
    Beiträge:
    96
    Zustimmungen:
    0
    liegt auch vielleicht daran, dass FreeBSD ein anderes sed benutzt als Linux

    schau dir mal gsed (gnu sed) an:

    Code:
    /usr/ports/textproc/gsed
    das ist die GNU Variante, die auch Linux benutzt. FreeBSD benutzt ein eigenes sed aus dem Basissystem.

    GNU's sed hat AFAIK erweiterte Funktionen

    Grüße
    Whopper
     
  10. #8 Gott_in_schwarz, 14.05.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Liegt auch vielleicht daran, dass du den Thread nicht gelesen hast. Nicht mal das (so sollte man meinen) obligatorische Initialpost:
    Und dann:
    Code:
    Cannot fork: Resource temporarily unavailable
    Gerade bei der Fehlermeldung finde ich es seltsam wieso die Leute hier auf sed tippen.
     
Thema:

FreeBSD Server - sed Problem

Die Seite wird geladen...

FreeBSD Server - sed Problem - Ähnliche Themen

  1. Server-Einbruch bei FreeBSD

    Server-Einbruch bei FreeBSD: Wie das Team hinter FreeBSD jetzt mitteilte, wurde bereits am 11. November entdeckt, dass zwei Rechner des FreeBSD.org-Clusters kompromittiert...
  2. Webcam freeBSD für Streamserver

    Webcam freeBSD für Streamserver: Hi Forum Ich würde gerne eine Webcam an meinem freeBSD Server anschliessen, mit der ich dann über das Internet einen Stream ansehen kann. Im...
  3. www.serverzeit.de - FreeBSD-Tutorials

    www.serverzeit.de - FreeBSD-Tutorials: Hallo liebe (werdende) FreeBSD-Fans, Auf meinem Weg FreeBSD lernen und lieben zu lernen habe ich viele Anleitungen, sogenannte Tutorials,...
  4. Netzwerk mit FreeBSD als Backup-Server

    Netzwerk mit FreeBSD als Backup-Server: Hallo! Habe folgendes Problem. Es besteht ein Netzwerk mit zwei Servern. Eine starke win2k3 Maschiene und eine schwache fbsd Machiene. Win2k3...
  5. FreeBSD Server

    FreeBSD Server: Hallo Ich habe in meiner Firma den Auftrag bekommen freebsd so zu konfigurieren das die Filiale in Russland Daten auf diesem Server speichern...