bash script unter Mac OS?

    • bash script unter Mac OS?

      Hallo allerseits,

      Ich hoffe, daß ich in der richtigen Rubrik gelandet bin. Meine Frage ist, ob ich bash-Skripte von Linux, speziell das unten angehängte, auch auf einem Mac (ca. 3 Jahre alt) zum laufen bringen kann.

      Die bash scheint es ja zu geben, und ich habe etwas von "fink" gelesen, das eine GNU-Umgebung, apt und anderes unter Mac OS bereitzustellen scheint, stimmt das? Der größte Haken wird wohl die Verwendung von iptables (Firewall-Regeln) und zenity(Fenster-Dialoge, setzt Gnome voraus) sein. Gibt es vielleicht, falls alles andere geht, Alternativen zu diesen Programmen?

      Oder kennt ihr vielleicht einfach ein anderes Programm, mit dem man sich selbst ein Zeitlimit beim Internetzugang pro Tag setzen kann?

      beste Grüße,

      M

      ---------------------------------------------------------

      #!/bin/bash
      tagesration=45
      konto=`cat ~/Skripte/DATA/netznutz/zeitkonto`
      zeit=`cat ~/Skripte/DATA/netznutz/kontozeit`
      jetztzeit=`date +%Y%m%d`
      echo `date +%T`" - Programmstart"

      iptables -L | grep -q "dpt:www"
      if [ $? -eq 1 ]; then
      echo `date +%T`" - Netz war offen, wird geschlossen."
      iptables -A OUTPUT -p tcp --dport 80 -j DROP
      fi
      if [ $zeit -lt $jetztzeit ]; then
      konto=$tagesration
      echo `date +%T`" - Heute ist ein neuer Tag"
      echo $jetztzeit > ~/Skripte/DATA/netznutz/kontozeit
      echo $konto > ~/Skripte/DATA/netznutz/zeitkonto # Das verhindert Inkonsistenz bei Abbrüchen
      fi

      warumenden=0
      while [ $warumenden -ne 1 ]
      do
      paket=`zenity --entry --title="Netznutz Abfrage" --text="Noch $konto Minuten übrig. Wieviele braucht's denn?"`
      if [ $? -eq 1 ]; then echo `date +%T`" - Abbruch!"; exit 0; fi
      paket=${paket//[^0-9]/}
      # eliminiert Stringeingaben
      if [ -z $paket ]; then echo `date +%T`" - Keine Eingabe. Nochmal machen."; continue; fi
      if [ $paket -eq 0 ]; then echo `date +%T`" - Netter Versuch, Al!"; continue; fi
      if [ $konto -lt $paket ]; then
      zenity --info --title="Möööp." --text "Soviel haben Sie doch gar nicht mehr!"
      continue
      fi
      echo -n `date +%T`" - Schalte http an - für $paket Minuten"
      iptables -D OUTPUT -p tcp --dport 80 -j DROP
      let konto=$konto-$paket
      echo " - danach noch "$konto" Minuten übrig"
      echo $konto > ~/Skripte/DATA/netznutz/zeitkonto
      let abschnitt=$paket*3
      for xy in 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 99
      do
      echo $xy
      sleep $abschnitt
      done | zenity --progress --title="Netznutz läuft" --text "$paket Minuten ab `date +%T`" --timeout=`let sekunden=60*$paket; echo $sekunden`
      echo `date +%T`" - Schalte http ab"
      iptables -A OUTPUT -p tcp --dport 80 -j DROP
      zenity --info --title="Netznutz Abschaltung" --text "Netz ist aus. Es bleiben $konto Minuten."
      done
    • Hallo,

      schau mal hier: bash script unter Mac OS?. Dort wird jeder fündig!

      Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
    • RE: bash script unter Mac OS?

      Endlich mal wieder jemand der skripten möchte :D

      Also die bash ist standardmäßig schon dabei. Probiere mal "echo $SHELL" aus :D

      Iptables gibt es nicht bei Mac OS X. Mac OS X nutzt ipfw dafür.
      Bevor ich mich ewig in das Script einlese. Was möchtest du erreichen? zenity gibt natürlich auch nicht, da wie bereits angesprochen dies Gnome voraussetzt.
      Für messages kannst du stattdessen AppleScript (und dies auch komplett damit umsetzen) oder Growl-Notification (auch über AppleScript realisierbar) nutzen.

      Willkommen im Forum.

      Original von maggi
      Oder kennt ihr vielleicht einfach ein anderes Programm, mit dem man sich selbst ein Zeitlimit beim Internetzugang pro Tag setzen kann?

      Nein aber das ist sicherlich auch mit bash/Applescript machbar oder man kauft sich dafür ein Programm (wenn es sowas auch für Mac OS X gibt, eine Herausforderung ist es tatsächlich dies zu skripten). Muss es dann gleich gesperrt werden oder reicht die Notification auch aus bzw. Mail an die Eltern oder Aufsichtsperson?
      Über die Kindersicherung in Mac OS X kann man nur den Zugang generell beschränken, aber nicht die Internetnutzung. Ich glaub, dass geht auch teilweise bei teueren Routern.
      AMD Ryzen 7 PRO 5750G, 32 GB RAM, 1 TB NVMe SSD, RTX 3060, Win 11
      iPad Air 2 64 GB, iPhone 13 128 GB
      UPS: APC Back-UPS Pro 900VA BR900G-GR

      "Der Erwerb von Reichtum ist nicht mehr die treibende Kraft in unserem Leben. Wir arbeiten, um uns selbst zu verbessern – und den Rest der Menschheit." (Jean-Luc Picard)
      Feedback an Apple

      Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von raymond ()

    • RE: bash script unter Mac OS?

      Danke!

      Das Skript blockiert zunächst den Port 80 - und schon geht kein Browser mehr. Es stellt dann ein Fenster bereit, in dem man eingeben kann, wie lange man den Browser benutzen möchte, öffnet den Port solange und schließt ihn dann wieder automatisch. Die eingegebenen Minuten werden vom täglichen Zeitkontingent abgezogen und wenn das aufgebraucht ist, gibts für den Rest des Tages keinen Surfspaß mehr.

      Ziel ist Selbstbegrenzung, nicht Kindersicherung. Wenn man vorher planen muß, wie lange man ins Netz geht, und auch ein Tageslimit hat, dann verliert man sich nicht mehr im Netz. Sehr praktisch beim Arbeiten, wenn man trotzdem weiterhin mal kurz was nachschlagen können möchte.

      (Klar könnte man das umgehen, wenn man es selbst installiert hat - aber witzigerweise tut man das nicht. Es verhindert einfach das gedankenlose mal schnell den Browser aufrufen.)

      Und nun ist die Frage, ob ich das auf dem Mac meiner Freundin auch hinbekomme, den ich leider nicht oft zur Hand habe..

      Ich bräuchte also mehr als bloße Messages: Auf jeden Fall Eingabefenster und idealerweise auch eine progress-bar. Und dann müßte ich noch lernen, wie ich mit ipfw einen Port blockiere.

      Alles andere müßte von der Syntax her laufen (echo, date, let, sleep) ?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von maggi ()

    • RE: bash script unter Mac OS?

      Original von maggi
      Ich bräuchte also mehr als bloße Messages: Auf jeden Fall Eingabefenster und idealerweise auch eine progress-bar. Und dann müßte ich noch lernen, wie ich mit ipfw einen Port blockiere.

      sudo ipfw add deny log tcp from any to any 80 out

      Wie bereits geschrieben bekommt man hübsche Ausgabefenster mit AppleScript hin. Vermutlich auch Eingabefenster. Lies dich da mal ein.
      Eine progress-bar ist eventuell eine kleine Herausforderung...

      Original von maggi
      Alles andere müßte von der Syntax her laufen (echo, date, let, sleep) ?

      Die Befehle funktionieren auch unter Mac OS X. Eventuell mit ein paar anderen Optionen. Musst mal in den manpages nachschauen.

      Sperren finde ich immer krass. Reicht wirklich kein TeaTimer?
      AMD Ryzen 7 PRO 5750G, 32 GB RAM, 1 TB NVMe SSD, RTX 3060, Win 11
      iPad Air 2 64 GB, iPhone 13 128 GB
      UPS: APC Back-UPS Pro 900VA BR900G-GR

      "Der Erwerb von Reichtum ist nicht mehr die treibende Kraft in unserem Leben. Wir arbeiten, um uns selbst zu verbessern – und den Rest der Menschheit." (Jean-Luc Picard)
      Feedback an Apple

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von raymond ()

    • RE: bash script unter Mac OS?

      Super - Da wäre schon mal ein Problem gelöst.
      Das nächste wäre dann, das Eingeben des Sudo-passworts zu umgehen. Aber ich nehme an, man kann die sudoers-Datei hier so konfigurieren wie unter Linux.

      Daß die Befehle möglicherweise andere Optionen haben, ist natürlich mißlich!
      Heißt also lesen und ausprobieren.

      Aber danke - mit diesen Tips komm ich schon mal vorwärts. Ich melde mich dann vermutlich wieder, wenn ich das Projekt tatsächlich angehe.

      (Aber was ist denn krass daran, sich den eigenen Computer zu sperren? Die Mittel sollten dem Zweck angemessen sein. Wenn ein Blick auf die Uhr reichen würde, dann hätt ich das Ding ja nicht geschrieben.)