cat $(which cat) zerschiesst Zeichensatz in tty

Dieses Thema im Forum "Fun" wurde erstellt von Gast123, 07.08.2009.

  1. #1 Gast123, 07.08.2009
    Zuletzt von einem Moderator bearbeitet: 07.08.2009
    Gast123

    Gast123 Guest

    Hallo zusammen.

    Ich packe dieses "Problem" mal hier rein.
    Einfach so habe ich dieses Kommando mal auf der tty4 unter openSUSE 11.1 x68_64 ausgeführt:
    Code:
    > cat $(which cat)
    Code:
    > uname -a
    Linux thinkpad 2.6.27.25-0.1-default #1 SMP 2009-07-01 15:37:09 +0200 x86_64 x86_64 x86_64 GNU/Linux
    
    Hier ein (qualitativ schlechtes) Video:
    klick
    Ich hoffe, es ist einigermaßen erkennbar.

    Hat jemand eine Idee, wie das kommt?

    MfG,
    Schard.
     
  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. Rvg

    Rvg Doppel-As

    Dabei seit:
    11.07.2004
    Beiträge:
    141
    Zustimmungen:
    0
    du gibts eine binaerdatei aus.
     
  4. #3 Aqualung, 07.08.2009
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Na ganz einfach: Das Binärfile "/bin/cat" enhält jede Menge "CRTL-"-Zeichen, die alles mögliche mit der Konsole anstellen, was Du - mit dem notwendigen Wissen dafür ausgestattet - auch via "STRG-", "ALt-", "ALTGR-", ... anstellen könntest.

    Mit

    Code:
    cat $(which cat) && reset
    sollten wieder vernünftige Zeichen auf der Konsole erscheinen.

    Code:
    od -c /bin/cat   | head -3
    0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
    0000020 002  \0   >  \0 001  \0  \0  \0   P 030   @  \0  \0  \0  \0  \0
    0000040   @  \0  \0  \0  \0  \0  \0  \0   x 243  \0  \0  \0  \0  \0  \0
    
     
  5. #4 Gast123, 07.08.2009
    Gast123

    Gast123 Guest

    Danke euch.

    Kannte den Befehl reset nicht.
    Dass der Inhalt von (der Binärdatei) cat dafür verantwortlich ist, habe ich geahnt.
    Ich dachte nur, dass cat den Inhalt als Text einfach an stdout ausgibt. Aber warum interpretiert die Konsole das?
    Die Frage mag für euch dumm erscheinen, aber ich bin eben noch kein GNU/Linux Profi.

    MfG, Schard.
     
  6. #5 Aqualung, 07.08.2009
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Warum sollte die Konsole die Eingabe nicht interpretieren?
    Wenn Du nur die *druckbaren* Zeichen ausgeben willst:

    Code:
    strings /bin/cat | head
    /lib64/ld-linux-x86-64.so.2
    SuSESuSE
    __gmon_start__
    libc.so.6
    strcpy
    __printf_chk
    setlocale
    mbrtowc
    fopen
    optind
     
  7. #6 Gast123, 07.08.2009
    Gast123

    Gast123 Guest

    Danke, danke!

    Ich sehe schon, ich muss noch viel lesen...
    Ich dachte nur, dass das ausschließlich eine Ausgabe an den Bildschirm wäre.
    Aber anscheinend ja auch eine Eingabe an die shell...

    MfG,

    Schard
     
  8. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    Im Prinzip wird einfach nur der Inhallt der Binärdatei von cat eingelesen und wieder ausgegeben, dabei kommen natürlich alle möglichen Werte vor, denen in der ASCII Tabelle kein Symbol zugeeordnet ist das normalerweise in Text vorkommt und so der Zufall es will kommt auch mal ein Terminal Steuercode vor der das Verhalten deines Terminalemulators verändert
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Gast123, 07.08.2009
    Gast123

    Gast123 Guest

    Danke euch für eure Antworten.

    So, genug gespielt für heute abend.

    MfG,
    Schard
     
  11. #9 Gott_in_schwarz, 13.08.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Das könnte der shift out control character gewesen sein.

    Code:
    perl -e 'print chr(14)'  # shift out
    Reversibel:
    Code:
    perl -e 'print chr(15)' # shift in
    Ascii control chars
    Zum (historischen) Sinn dieser control character's, schaust du hier.
     
Thema:

cat $(which cat) zerschiesst Zeichensatz in tty