Der Code-Schnippsel-Thread

  • fping ist das Mittel der Wahl.

    Alle pingen: fping -a -g 192.168.178.0/24
    Alle pingen, nur die zeigen die online sind: fping -a -q -g 192.168.178.0/24
    Jede Menge weiterer Optionen: man fping


  • Alle druckbaren ASCII-Zeichen ausgeben.

    Neu: jetzt auch funktional!

    Code
    import Data.Char (chr)
    import Data.List (intersperse)
    
    
    main :: IO ()
    main = putStr $ unlines [ (intersperse ' ' [chr x | x <- [0x00 + i .. 0x0f + i], x /= 0x7f]) | i <- [0x20, 0x30.. 0x70]]


    Ich gebs zu, ein bisschen unübersichtlich und nichmal konsistent.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

    Einmal editiert, zuletzt von thosch97 (7. Januar 2015 um 23:44)

  • Ich bin grade n bisschen verwirrt.

    Mein Backup-Script sieht so aus


    Wenn Ich das Script ausführen möchte, bekomme ich folgende Meldung:


    Edit: Ok hatte Syntaxfehler drin.

    So funkts


    Meine Beiträge stehen unter der MIT-Lizenz:D


    externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.

    Einmal editiert, zuletzt von tk1908 (18. Januar 2015 um 17:15)

  • Tu das doch mal in irgendein VCS-Repo, das kann man ja nicht mit ansehen. RCS wenns sein muss, aber mal _irgendwas_.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

  • Bash
    #!/bin/bash
    open -na /Applications/Skype.app --args -DataPath /Users/$(whoami)/Library/Application\ Support/Skype2

    Zweite Skype-Instanz auf OS X starten.

    Wichtig: Vor dem ersten Aufruf einmal mkdir /Users/$(whoami)/Library/Application\ Support/Skype2


  • Wichtig: Vor dem ersten Aufruf einmal mkdir /Users/$(whoami)/Library/Application\ Support/Skype2

    [ -d "/Users/$(whoami)/Library/Application\ Support/Skype2" ] || mkdir "/Users/$(whoami)/Library/Application\ Support/Skype2"
    Hat das kein $HOME oder wenigstens $USER?
    Und überhaupt, dafür brauchste keine bash starten, da reicht ne POSIX-Shell übrig. Und den Pfad würd ich mal noch quoten (wenn du ein Username mit Leerzeichen hast, gehörst du geschlagen, aber macht man einfach).

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

  • [ -d "/Users/$(whoami)/Library/Application\ Support/Skype2" ] || mkdir "/Users/$(whoami)/Library/Application\ Support/Skype2"
    Hat das kein $HOME oder wenigstens $USER?
    Und überhaupt, dafür brauchste keine bash starten, da reicht ne POSIX-Shell übrig. Und den Pfad würd ich mal noch quoten (wenn du ein Username mit Leerzeichen hast, gehörst du geschlagen, aber macht man einfach).

    Mit ner if-Abfrage das Verzeichnis bei Bedarf anlegen kann man natürlich am Anfang machen. Man kann aber genauso gut als ersten Schritt das Verzeichnis einmal anlegen und gut, macht ja keinen großen Unterschied.

    Warum soll ich eine veraltete sh nehmen, wenn ich bash verfügbar habe? Mit SH gehen einige nette Shortcuts von bash nicht (auch wenn ich hier keine davon benutze)

    Ja, ${HOME} hätte ich nehmen können statt /Users/$(whoami), aber am Mac kommt da das gleiche raus.

    Zu Usernames mit Leerzeichen: Unter OS X hat man das nicht. Der Vorname-Nachname-Username ist wie bei Linux das "vollständiger Name"-Feld, der eigentliche Benutzername ist standardkonform. In meinem Falle afeld und Alexander Feld. Habe ich beim Linux Mint im Büro genauso.



    Hier mal die thosch-kompatible Variante:

    Bash
    #!/bin/bash
    if [ ! -d "${HOME}/Library/Application Support/Skype2" ]
    then
    	mkdir "${HOME}/Library/Application Support/Skype2"
    fi
    open -na /Applications/Skype.app --args -DataPath "${HOME}/Library/Application Support/Skype2"

    Man könnte das Script jetzt noch gucken lassen, wie viele Skype-Verzeichnisse da sind und entsprechend hochzählen, dann würde auch ne 3., 4. Instanz usw gehen. Aber das wäre echt unnötig.

    Ich bleibe aber bei Bash, das ist bei OS X einfach Standard. Unter den meisten Linux-Distributionen übrigens auch.


  • Die meisten Scripts nutzen dennoch sh. Du und deine angeblichen Standards, die keine sind :rolleyes:

    Vor allem das mit den Nutzernamen - DEN Standard musst du mir zeigen.

    Unter OS X ist /bin/sh mit /bin/bash identisch, sieht man etwa am funktionierenden Completion.

    Echtes sh ist zum scripten eher doof, da viele wichtige Funktionen nicht laufen. Folgendes Beispiel geht etwa NICHT auf sh und muss statt der internen Zählfunktion auf Tools wie seq zurückgreifen:

    Code
    for i in {1..23}
    do
    	echo "Hallo ${i}";
    done

    Bevor du nun sagst "Das geht wohl in sh, guck mal hier am Mac" beachte, was sh dort ist.

    Beispiel unter Ubuntu:

    Code
    root@stuart[~]
    # for i in {1..3} ; do echo Hallo bash ${i}; done
    Hallo bash 1
    Hallo bash 2
    Hallo bash 3
    
    
    # for i in {1..3} ; do echo Hallo sh ${i}; done
    Hallo sh {1..3}

    Und das ist nur ein Beispiel von vielen, was in bash problemlos geht und in einer reinen sh (etwa der von Busybox) nicht geht. Habe täglich mit beiden Shells beruflich zu tun.

    Also was willst du mir damit also nun sagen?

    Dass man auf Homeverzeichnisse nicht so direkt zeigen soll stimmt ja, auf einem Mac OS X-Einzelplatzsystem ist das aber vernachlässigbar, da sie dort immer unter /Users liegen. In Netzwerken wo etwa das Home per NFS gemountet wird sieht das natürlich anders aus. Aber da nutzt man meist kein Skype. Und wenn doch, kann man ja ${HOME} im Script benutzen.

    Und das tollste an diesem Script: Gerne könnt ihr euch das für eure Lieblingsshell umbauen und es wird vermutlich aufgrund der geringen Komplexität überall laufen. Somit sind auch alle Fans von sh, ksh, tcsh, pdsh, zsh, fish und co nicht ausgegrenzt und können entsprechende Versionen erstellen.

    Auch wenn die Shell bei diesem "Script" (prinzipiell tuts sogar ein Alias für den einen Aufruf) egal ist, bei komplexeren Sachen sollte man schon Bash nehmen, damit man alle Funktionen nutzen kann. Sei es zählen oder Integerrechnen oder sonst was. Da kommt man mit sh nicht weit.

    Hier noch was zu OS X:

    Code
    afeld@feldibook[~]
    $ /bin/sh
    afeld@feldibook[~]
    $ echo ${SHELL}
    /bin/bash

    Bonus: Auf IRIX wo die Bash unter /usr/nekoware/bin/ liegt kann man ja den env-Befehl im Shebang nutzen, um sie aufzufinden.

  • Also ich benutze immer lieber den kleinsten gemeinsamen Nenner. Wenn ich auf NetBSD unterwegs bin, hab ich auch oft aus Faulheitsgründen keine bash installiert und tu’s erst, wenn ich eine Funktion wirklich schmerzlich vermisse. :D

    Aber ausschlaggebend für mich ist immer die Performance, also lasst uns doch mal einen Performance-Vergleich machen.

    • • • – • – – • – –

  • Du hast aber nicht immer auf jedem System, auf dem du mal eben was scripten möchtest, einen Compiler installiert.
    Außerdem verlierst du dann den menschenlesbaren Source, den man vielleicht mal noch anpassen will und musst stattdessen allerlei Konfigurationsmöglichkeiten für zukünftige Was-wäre-wenn-Fälle in der kompilierten Software vorsehen. Aus »schnelle Lösung« wird dadurch gleich ein ganzes Programmierprojekt.

    Aber ja, wenn ich von vornherein weiß, dass ich eine langwierige Prozedur vorhabe, wo der Unterschied zwischen einem zu interpretierendem Script und einer kompilierten Software durchaus in Stunden ausufern kann, dann kompiliere ich lieber was.

    • • • – • – – • – –

  • Und du ihn anscheinend nicht gelesen. Sonst wüsstest du, dass die sh-Skripte unter OS X alle bash nutzen. auch wenn sie /bin/sh als Shebang haben.


  • Und du ihn anscheinend nicht gelesen. Sonst wüsstest du, dass die sh-Skripte unter OS X alle bash nutzen. auch wenn sie /bin/sh als Shebang haben.

    Du, das ist mir schon bewusst. Es steht außerdem außer Frage, dass die bash mehr Funktionen hat als die sh. Es ging mir darum, dass du Standards proklamierst, die keine sind und diese auch ständig wieder erwähnst.

  • Und der Standard ist eben, dass man im Zweifelsfall keine Bash hat, dass der extra Fork völlig übertrieben ist (Alias oder Shellfunktion), und dass man auch mit einer POSIX-Shell Skripte schreiben kann, vielleicht nicht so angenehm eben. Z.B. mal eins von mir: daemontools-Runscript für git-daemon(1).

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

    Einmal editiert, zuletzt von thosch97 (20. Januar 2015 um 11:40)

  • Unter OS X gibt es standardmäßig nur die Bash, daher ist das vollkommener Blödsinn in dem Fall, sich da auch nur ansatzweise Gedanken zu zu machen. Auch auf modernen Linux-Distributionen ist sogut wie immer eine Bash bei. Also ist das auch da vernachlässigbar. Klassisches sh hat man höchstens in Embedded-Umgebungen, aber von denen rede ich ja hier nicht. Wir sind nicht mehr im Jahr 1993 oder so, sondern haben 2014 - Und da hat jede halbwegs moderne Distribution eine bash vorinstalliert.

  • Eigentlich haben wir 2015. Siehst du keine Hoverboards?

    ThinkPad X13s gen1 - Snapdragon 8cx gen3 - 16 GB DDR4 - Adreno 690 - 1 TB Corsair MP600 mini - FHD IPS - Win11
    New Shyzen - Ryzen 5 5600X - 32 GB DDR4 - Radeon RX 6750 XT - 250 GB Samsung 960 EVO; 120 GB Intenso SATA - 4k IPS - Win11
    Es ist RISC im Haus!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!