Stdout umleiten



  • Hallo,

    die folgende Zeile schreibt ja Hallo in foo.txt
    echo "Hallo" > foo.txt
    fuehre ich die selbe Zeile nochmal aus, (nur diesmal mit "Hallo2", dann wird auf meinem PC die Datei ueberschrieben (es steht also Hallo2 in foo.txt)
    Mache ich exakt das selbe einem anderen Rechner (Linux openSUSE mit tcsh), sprich:
    echo "Hallo" > foo.txt
    echo "Hallo2" > foo.txt
    Dann geht die 1. Zeile, aber bei der 2. Zeile meckert er mit "File does exist" und bricht ab. Sprich nach den 2 Zeilen steht nur "Hallo" in foo.txt.
    Wie kann das sein? Ich dachte operator > ueberschreibt IMMER die Datei? Ist das irgend eine globale Einstellung? Wie kann ich das fixen, so dass er immer die Datei ueberschreibt?



  • Naja, die Redirection ist Shell-spezifisch. Mit der tcsh kenne ich mich überhaupt nicht aus, aber die könnte sich da ohne weiteres anders verhalten.

    Gibts irgendeinen bestimmten Grund, warum Du die tcsh benutzen möchtest?


  • Mod

    Das ist eine globale (im Sinne deiner Shell) Einstellung namens noclobber . Die kannst du zum Beispiel mittels set ändern. Oder du kannst mittels >| ein Überschreiben erzwingen.

    edit: Oh, hatte nicht gesehen dass du tcsh verwendet. Da ist das wahrscheinlich ein bisschen anders. Aber mit den Stichworten die ich gegeben habe findest du auch Anleitungen dafür.

    edit2: @nman: tcsh ist gut wenn man viel selber an der Kommandozeile arbeitet, weil die Befehlsvervollständigung besser ist als bei bash. Zum Scripten ist sie aber absoluter Müll.



  • SeppJ schrieb:

    tcsh ist gut wenn man viel selber an der Kommandozeile arbeitet, weil die Befehlsvervollständigung besser ist als bei bash.

    Hast du ein Beispiel?



  • SeppJ schrieb:

    tcsh ist gut wenn man viel selber an der Kommandozeile arbeitet, weil die Befehlsvervollständigung besser ist als bei bash. Zum Scripten ist sie aber absoluter Müll.

    Dafür habe ich meine zsh mit grml-etc-core. (Siehe auch http://michael-prokop.at/blog/2007/12/22/make-console-work-comfortable/.)

    Shade: Probier am besten einfach mal die Grml-Config von oben eine Zeitlang aus, die steckt voller netter kleiner Überraschungen.



  • nman schrieb:

    Probier am besten einfach mal die Grml-Config von oben eine Zeitlang aus, die steckt voller netter kleiner Überraschungen.

    Zb. ordentliche Host-Completion bei SSH, Command-Completion für massig Tools, sehr gute Completion für git und Co, …

    Wenn Du zB. ps2pdf verwendest, werden nur .ps-Files vervollständigt, für cd nur Verzeichnisse, genauso wie bei rmdir. Wenn ich mich nicht mehr an den Namen meiner Git-Branches erinnere, kann ich durchtabben, wenn ich mich nicht mehr an die Optionen von GPG oder rsync erinnere, benutze ich einfach "gpg --d[TAB]" oä.

    Mir fällt jetzt kaum etwas großes ein. Nur wenn ich gerade keine zsh habe, geht mir die viel viel bessere Completion unheimlich ab. Und nein, die diversen bash-completion-Pakete sind nicht vergleichbar. 🙂



  • Werde ich zuhause mal testen. Die bash completion gefällt mir eh nicht so toll...

    Muss mal sehen obs das auch für OS X gibt...


  • Mod

    Shade Of Mine schrieb:

    Hast du ein Beispiel?

    Ehrlich gesagt nicht mehr, denn wie ein wenig Recherche meinerseits ergab, kann bash mittlerweile das gleiche. Und von der Beschreibung her sogar besser. Werde ich mir definitiv mal die nächsten Tage mal angucken. Damit wäre (endlich!) der vorletzte Grund weg, weswegen ich von Zeit zu Zeit noch tcsh benutze. Der letzte Grund ist, dass ich eine über Jahre gewachsene, gute Configdatei nach meinen Bedürfnissen für tcsh habe und für bash nur ein paar Standardsachen.



  • Habt ihr bash-completion denn nicht installiert? Also ich habe alle hier aufgezählten completions + ettliches mehr.

    Mir ist im Übrigen aufgefallen, dass viele Leute die frisch zur Zsh wechseln es kurz darauf für nötig befinden einen Artikel zu verfassen in dem sie erzählen wie toll doch die Zsh ist und dabei kann die Bash alles was sie einem dann für neu verkaufen sollen, siehe z.B. http://linuxgazette.net/183/silva.html

    Für Features die die Bash tatsächlich nicht hat, siehe http://linuxgazette.net/184/silva.html

    Wobei man zumindest die version control information auch in der Bash bekommen kann. Habe ich für Git auch. Die vertical argument history gibt es in eingeschränkter Form auch mit M-C-y (yank-nth-arg).

    Insgesamt zeichnet sich aber deutlich ab, dass die große Mehrheit die täglich mit der Bash arbeitet diese kaum kennt.



  • Und wie bekomm ich die in die bash?



  • Shade Of Mine schrieb:

    Und wie bekomm ich die in die bash?

    z.B. sudo apt-get install bash-completion

    Es gibt übrigens (mindestens) zwei Projekte:
    [1] http://bash-completion.alioth.debian.org
    [2] http://code.google.com/p/bash-completion-lib

    Traditionell hat jede Distribution irgendeine Datei in /etc liegen die man einfach in seiner .bashrc laden muss damit die ganzen Systemweiten Einstellungen geladen werden. Bei Debian müsste das sogar automatisch gehen, ansonsten einfach: source /etc/bash_completion (bei Debian/Ubuntu).



  • Basher schrieb:

    Habt ihr bash-completion denn nicht installiert?

    Doch. Ohne ist Bash ja absolut nicht benutzbar. Genauso wie ich die zsh out-of-the-box nicht verwenden wollen würde.

    Das Problem mit bash-completion ist, dass oberflächlich alles da ist, die subtileren Kleinigkeiten aber kaum je passen. Wundert mich auch nicht, weil bash-completion ein großer Berg übler Hacks ist. Ich beneide auch keinen der Entwickler um den Job, die habens echt nicht einfach.

    Ganz abgesehen davon, dass die bash dann immer noch so praktische Features wie die Inline-Glob-Extension nicht hat, das Globbing generell schlecht ist etc.

    bash-completion ist einfach immer einen Schritt hinterher, ich habe noch nichts gesehen, was damit besser wäre, als bei einer vernünftigen zsh-Konfiguration (wie zB. der oben verlinkten grml-Config).

    Shade Of Mine: Wenn Du sie unter OS X ausprobieren möchtest, gibts dafür ein Homebrew-Paket namens "bash-completion". zsh ist ohnehin auch auf jedem Mac vorinstalliert, probier einfach mal beides.


Anmelden zum Antworten