"Batch" Datei für das Mac Terminal - Shutdown mit Eingabeaufforderung

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von sakyra, 21.12.12.

  1. sakyra

    sakyra Macoun

    Dabei seit:
    18.04.12
    Beiträge:
    16
    Zustimmungen:
    0
    Hallo,
    ich möchte eine ausführbare Datei schreiben, also genau wie eine Batch Datei die folgendes macht auf dem Mac:

    den Befehl "shutdown -h +"zeit"" ausführt, die variable "zeit" möchte ich am anfang selbst vergeben und dann durch enter bestätigen können.

    wie baue ich sowas? in windows schreibe ich das in 1 minute und speichere es als .bat.

    Das muss doch auch in Mac OS gehen oder? Habe XCode installiert.

    Hoffe jemand kann mir helfen,
    Gruß
  2. dadudeness

    dadudeness Friedberger Bohnapfel

    Dabei seit:
    06.09.07
    Beiträge:
    604
    Zustimmungen:
    20
    Unter OSX/Linux/Unix brauch man auch nicht länger:

    Erzeuge mit einem Editor Deiner Wahl eine Datei, die Du z.B. runterfahren.sh nennst.
    (Da es hier Shell-generde ist, ist natürlich vi zu bevorzugen, schlimmstenfalls wäre aber auch nano OK ;) )

    Die beinhaltet dann z.B: sowas wie

    Code:
    #!/bin/sh
    echo "Bitte Zeit t zum Runterfahren eingeben\n"
    read zeit
    echo "Hier (natürlich ohne das echo und ohne die \" ) beliebigen Befehl einfügen.\nDer eingegebene Wert ist übrigens: $zeit"
    Diese kannst dann speichern. Jetzt muss die Datei noch Rechte erhalten, ausgeführt zu werden:

    Code:
    chmod +x runterfahren.sh
    Nun kannst sie per
    Code:
    ./runterfahren.sh
    starten.

    Wenn Du es richtig machen willst, kannst dann die Eingabe noch prüfen, ob es sich dabei um einen gültigen Wert handelt, damit da z.B. keiner "abcdefg" oder so eingibt, aber im Grunde funzt das so.


    Mit der Shell kann man echt viel machen, XCode brauchst dafür nicht.
  3. sakyra

    sakyra Macoun

    Dabei seit:
    18.04.12
    Beiträge:
    16
    Zustimmungen:
    0
    Danke für die hilfreiche Antwort. Eine Frage habe ich noch: Du schreibst ich kann die Datei per ./runterfahren.sh starten. Ist es auch möglich die Datei, nachdem ich sie einmal mit chmod entsprechend berechtigt habe, einfach per doppelklick vom desktop auszuführen?

    edit.: Ach und mir ist noch aufgefallen, dass ich das .sh Script in der Konsole dann nicht mit Ctrl+C stoppen kann... ein Schließen des Fenster auch nicht, dann will er nen login haben ?! Wie unterbreche ich die Ausführung des Script und komme zurück zum "normalen" Terminal, dass wieder auf eine Eingabe wartet?
    Zuletzt bearbeitet: 21.12.12
  4. Rastafari

    Rastafari Beauty of Kent

    Dabei seit:
    10.03.05
    Beiträge:
    15.522
    Zustimmungen:
    1.116
    1) Shellskripte können bei Doppelklick automatisch das Terminal öffnen, um sofort darin ausgeführt zu werden.
    Dazu genügt es, ihnen eines der Suffixe *.tool oder *.command zu verpassen. Beide sind per Default mit Terminal.app verknüpft.

    2) Shellskripte können durchaus mit Ctrl-C abgebrochen werden.

    3) Wenn ein Terminalfenster/-tab bei einem noch laufenden Programm geschlossen wird, wird *kein* login verlangt. Ganz im Gegenteil, es wird nur darauf hingewiesen, dass u.a. ein Programm dieses Namens dort noch aktiv ist, das beim töten des Fensters mitsamt seiner Kindprozesse abgeschossen würde - und du wirst gefragt ob du das tatsächlich so haben willst.
    In den Einstellungen des Programms Terminal.app ist festgelegt, dass diese obligatorische Warnmeldung nur dann ohne Nachfrage übergangen wird, wenn ausser "login", "bash" und der dort eingetragenen Liste von Ausnahmen nichts anderes mehr aktiv ist. Es empfiehlt sich, diese Einstellung beizubehalten.
  5. dadudeness

    dadudeness Friedberger Bohnapfel

    Dabei seit:
    06.09.07
    Beiträge:
    604
    Zustimmungen:
    20
    Wenn Du die Dateierweiterung in .command änderst, kannst das Script direkt aus dem Finder ausführen.

    Abbrechen geht mit cmd+.


    EDIT: Da war der Rastaman schneller
  6. sakyra

    sakyra Macoun

    Dabei seit:
    18.04.12
    Beiträge:
    16
    Zustimmungen:
    0
    Das hier meine ich: Bildschirmfoto 2012-12-21 um 23.31.00.png das bekomme ich nicht weg...
  7. Rastafari

    Rastafari Beauty of Kent

    Dabei seit:
    10.03.05
    Beiträge:
    15.522
    Zustimmungen:
    1.116
    Wenn du die shutdown-Option -k benutzt hast - das solltest du nicht tun.
    Wenn nicht... ein Bug in ML ? (??)

    Ansonsten sei dir empfohlen, überhaupt nicht mit shutdown zu arbeiten (das superuser-Privilegien braucht).
    Stattdessen darf jeder Benutzer (der lokal am Rechner angemeldet ist) seine eigene Benutzersitzung mittel eines AppleEvents dazu auffordern, alles nötige selbst zu veranlassen - die GUI besitzt dieses Privileg auch ohne root zu bemühen. Ein entsprechender Event lässt sich in einem Shellskript so generieren:
    Code:
    osascript -e 'tell app "System Events" to sleep'
    
    # bzw
    
    osascript -e 'tell app "System Events" to restart'
    
    # bzw
    
    osascript -e 'tell app "System Events" to shut down'
    
    # Aufgemerkt: [U]ohne[/U] sudo
    #
    # das ist exakt äquivalent zur Wahl
    # des entsprechenden Punkts im Apfelmenü
    # dh auf diese Weise geht kein offenes Dokument verloren
    # und noch laufende Programme können den Vorgang aufhalten 
    # (Sicherheitsabfrage zum speichern usw)
    Für eine spätere Ausführung kannst du zB den Scheduler 'at' benutzen, dann brauchst du auch das Terminalfenster nicht mehr bis zum Zeitpunkt x offen lassen:
    Code:
    echo 'osascript -e "tell app \"System Events\" to sleep";' | at + 5 minutes
    Damit das funktioniert, musst du nur einmalig den "atrun"-Dienst auf deinem System permanent aktiv schalten, normalerweise ist der stillgelegt.
    Das darf natürlich nur ein Admin (plus Kennwort) tun:
    Code:
    sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
    Mit einem "unload" kannst du ihn nach Wunsch wieder abschalten.
    Zuletzt bearbeitet: 22.12.12
  8. sakyra

    sakyra Macoun

    Dabei seit:
    18.04.12
    Beiträge:
    16
    Zustimmungen:
    0
    Danke für deine Hilfe. Machst du das beruflich oder wieso kennst du dich damit so aus? o_O Ich habe shutdown -h verwendet vorher, also tritt bei mir anscheinend dieser Bug auf... Ich teste es mal auf deine Weise, danke nochmals.

Diese Seite empfehlen