Ubuntu - C Shell arbeitet nicht



  • Hallo,

    ich muss im Rahmen meines Studiums einige Skripte mit der C Shell erstellen. Im Rechenzentrum (Sun Pool) ist das kein. Thema. Jetzt wollte ich daheim weiter arbeiten und habe auf meinem XUbuntu 8.10 (2.6.27-14-generic) über aptiude das Paket csh installiert.

    Beim Aufruf eines Skrips (selbst eines einfachen Skripts mit einfacher "Hallo Welt"-Ausgabe) bricht mit folgender Meldung ab:

    tux@erde:~/pfad/$ ./skript.sh 
    HOST: Undefined variable.
    

    Habe schon diverse Seiten durchstöbert, aber brachte bisher nichts. Der Skriptaufruf über den absoluten Pfad bricht auch nichts.

    Der Aufruf der C Shell an sich funktioniert auch nicht 100% fehlerfrei:

    tux@erde:~/pfad/$ csh
    HOST: Undefined variable.
    % echo "Hallo Welt"
    Hallo Welt
    %
    

    Hat jemand einen Hinweis wo man ansetzen könnte bei der Fehlersuche?
    Gruß



  • Kann es sein, dass die CSH eine .profile oä. einliest, die für die Bash gedacht war?

    Mach mal ein "strace -f -e open csh".



  • Hallo nman,

    erstmal danke für deine schnelle Antwort.
    Hier der Output:

    open("/etc/ld.so.cache", O_RDONLY)      = 4
    open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 4
    open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No suc
    h file or directory)
    open("/usr/share/locale/locale.alias", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No 
    such file or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_IDENTIFICATION", O_RDONLY) = 4
    open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_MEASUREMENT", O_RDONLY) = -1 ENOENT (No suc
    h file or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_MEASUREMENT", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_TELEPHONE", O_RDONLY) = -1 ENOENT (No such 
    file or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_TELEPHONE", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_ADDRESS", O_RDONLY) = -1 ENOENT (No such fi
    le or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_ADDRESS", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_NAME", O_RDONLY) = -1 ENOENT (No such file 
    or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_NAME", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_PAPER", O_RDONLY) = -1 ENOENT (No such file
     or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_PAPER", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_MESSAGES", O_RDONLY) = -1 ENOENT (No such f
    ile or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_MESSAGES", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.utf8/LC_MESSAGES/SYS_LC_MESSAGES", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_MONETARY", O_RDONLY) = -1 ENOENT (No such f
    ile or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_MONETARY", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_COLLATE", O_RDONLY) = -1 ENOENT (No such fi
    le or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_COLLATE", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_TIME", O_RDONLY) = -1 ENOENT (No such file 
    or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_TIME", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_NUMERIC", O_RDONLY) = -1 ENOENT (No such fi
    le or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_NUMERIC", O_RDONLY) = 4
    open("/usr/lib/locale/de_DE.UTF-8/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such file
     or directory)
    open("/usr/lib/locale/de_DE.utf8/LC_CTYPE", O_RDONLY) = 4
    open("/etc/csh.cshrc", O_RDONLY)        = 0
    open("/usr/local/sbin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/usr/local/bin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/usr/sbin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/usr/bin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/sbin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/bin", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/usr/games", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|0x80000) = 0
    open("/home/meinhome/.cshrc", O_RDONLY) = 0
    HOST: Undefined variable.
    % --- SIGWINCH (Window changed) @ 0 (0) ---
    --- SIGWINCH (Window changed) @ 0 (0) ---
    --- SIGWINCH (Window changed) @ 0 (0) ---
    --- SIGWINCH (Window changed) @ 0 (0) ---
    ... // hier kommen noch mehr dieser Zeilen
    %
    

    Also scheinbar ließt er die ~/.cshrc ein...

    Hab diese mal nach der HOME gegrept:

    switch (${HOST})
                    # Host mit spezieller Parallelrechner Software
    # Sollte für alle Hosts gelten, Reihenfolge ist entscheidend
            set prompt1 = "(`/usr/ucb/whoami`@`hostname`)"
    

    Hilft das irgendwie weiter? Bin noch etwas überfragt 🙂



  • SCNR: http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
    nimm lieber die bash oder zsh für deine Skripten.



  • Naja, da hast Du Dein Problem doch schon. Offensichtlich wird $HOST in der .cshrc verwendet, vorher allerdings nicht definiert.

    (Bin unabhängig davon rüdigers Meinung: csh lieber vermeiden, wenn möglich.)



  • Ich bin eurer Meinung und würde es gern vermeiden die csh zu nutzen, nur leider _muss_ ich das im Rahmen des Studiums - wie oben schon beschrieben 🙂

    Aber vielen Dank trotzdem soweit.



  • Zum Thema: Falls Du es noch nicht machst, check einfach, ob $HOST definiert ist und setze es - falls nicht - auf die Ausgabe von hostname.



  • Mitlerweile funktioniert das mit der csh .

    Hier nochmal kurz aufgeführt was für Einstellungen nötig waren, falls jemand auch mal so ein Problem haben sollte:

    1.) Installation der coreutils (für das whoami )
    2.) Anlegen des Verzeichnis' /usr/ucb
    3.) Symbolischen Link /usr/ucb/whoami auf /usr/bin/whoami
    4.) in der ~/.cshrc Abfrage ob $HOST definiert, wenn nicht: z.B. /etc/hostname auslesen und entsprechend $HOST setzen

    Danke nman für die Hinweise 🙂



  • Dazu ein paar Verbesserungsvorschläge/Anmerkungen:

    hando schrieb:

    1.) Installation der coreutils (für das whoami )

    Hu? Wie hast Du es denn geschafft, Ubuntu ohne coreutils zu installieren? 🙂

    2.) Anlegen des Verzeichnis' /usr/ucb
    3.) Symbolischen Link /usr/ucb/whoami auf /usr/bin/whoami

    Klingt eher so, als solltest Du /usr/bin in Deinen $PATH hinzufügen.

    4.) in der ~/.cshrc Abfrage ob $HOST definiert, wenn nicht: z.B. /etc/hostname auslesen und entsprechend $HOST setzen

    Lieber man: hostname(1) verwenden, das ist portabler.


Anmelden zum Antworten