• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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

sakyra

Granny Smith
Registriert
18.04.12
Beiträge
17
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ß
 

dadudeness

Dithmarscher Paradiesapfel
Registriert
06.09.07
Beiträge
1.448
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.
 

sakyra

Granny Smith
Registriert
18.04.12
Beiträge
17
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:

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
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.
 

dadudeness

Dithmarscher Paradiesapfel
Registriert
06.09.07
Beiträge
1.448
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
 

sakyra

Granny Smith
Registriert
18.04.12
Beiträge
17
Das hier meine ich: Bildschirmfoto 2012-12-21 um 23.31.00.png das bekomme ich nicht weg...
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
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:

sakyra

Granny Smith
Registriert
18.04.12
Beiträge
17
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.