Tu das doch mal in irgendein VCS-Repo, das kann man ja nicht mit ansehen. RCS wenns sein muss, aber mal _irgendwas_.
Der Code-Schnippsel-Thread
-
-
-
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). -
[ -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

Vor allem das mit den Nutzernamen - DEN Standard musst du mir zeigen.
-
Die meisten Scripts nutzen dennoch sh. Du und deine angeblichen Standards, die keine sind
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:
Bevor du nun sagst "Das geht wohl in sh, guck mal hier am Mac" beachte, was sh dort ist.
Beispiel unter Ubuntu:
Coderoot@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:
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.

Aber ausschlaggebend für mich ist immer die Performance, also lasst uns doch mal einen Performance-Vergleich machen.
-
Naja wenn ich Performance will, nehm ich kein Script, sondern ein kompiliertes Programm, etwa in C.
-
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.
-
shadowtux: Lass mal hier bitte nicht den "Beruf" raushängen, da ich ja bekanntlich den selben habe. Es gibt nur zu sagen: Du hast meinen Kommentar verstanden [ ]
-
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).
-
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?
-
Verstehe gar nicht, warum hier so ein Wind gemacht wird? Da steht doch #!/bin/bash. Ist also ein Bash-Script, kein POSIX-Shellscript. Schlimmer wäre wenn da #!/bin/sh steht, es aber bash-spezifische Funktionen nutzen würde. Ihr beschwert euch ja auch nicht, wenn da #!/usr/bin/python stehen würde, dass es nicht mit Perl geht.
Der Programmierer hat sich entschieden, mit moderneren Tools zu arbeiten. Davon hat praktisch immer auch der User was davon, denn Abwärtskompatibilität/Portierbarkeit ist so gut wie nie gratis, das geht immer auf Kosten von Programmieraufwand (weil man die Specs lesen muss, mit welcher Plattform was noch geht) und Wartungskosten (weil man unnötig komplizierten Code schreiben muss).
Wer unbedingt Portierbarkeit will, muss sich halt selber darum kümmern. Ich schreib auch immer prinzipiell #!/bin/bash hin, selbst wenn ich nicht plane, irgendwelche Bash-isms zu nutzen. Damit sage ich dem User: "Ich habe keine Lust, zu garantieren dass das auch deinem Unix von 1998 noch läuft. Du musst selber schauen, ob das mit einer Shell kompatibel ist, ich garantiere nur Bash". Denn ich konzentriere mich lieber auf echte Bugs und Funktionalität, als meine Zeit mit Shellbugs von 1998 zu verschwenden.
-
Sieht für mich ehr nach Shadowtuxbashing wieder aus.. muss diesmal sagen, das ich dies nicht gerechtfertigt finde.
Und das mal von einem, der Kein Plan davon hat was ihr da labert. Aber selbst mir scheint das ersichtlich und btw siehe gandro.
-
is sowieso nur ein riesengehate hier, niemand darf wirklich frei und sachlich was sagen, is sofort alles negativ und mimimi, vielleicht sollten einige hier mal ihren fahrradlenker aus dem hinterteil befreien
-
Feinstes Derailment a la WHF wieder mal...
Egal, back to topic.
Ich hab mir mal tlschecker.sh zusammengefrickelt. Zweck: Signaturalgorithmus des Zertifikats anzeigen lassen und dann testen, welche Ciphers so supported werden. Warum? Das allgeläufige SSL-Test-Webseitending kann nur Port 443.
-
Bash
Alles anzeigen#!/bin/bash if [ "$1" = "-h" ]; then echo Verwendung: avrcompile.sh dateiname echo Syntax: echo "./avrcompile.sh bitmuster kompiliert und brennt die datei bitmuster.c" echo "Ende" exit fi if [ "$1" != " " ]; then echo "kompiliere..." avr-g++ $1.c -mmcu=atmega8 -o $1.elf read -p "weitermachen? (j/n) " frage if [ "$frage" = "j" ]; then echo "linke..." avr-objcopy -O ihex $1.elf $1.hex echo "brenne..." avrdude -p m8 -c avr911 -P /dev/ttyUSB0 -U flash:w:$1.hex:i else exit fi fi exit 0Ein kleines Skript, dass kompilieren für myAVR-Boards etwas vereinfacht.
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!