Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Software
>
Dialogbox in Shell-Skript ohne Programmieren?
Dialogbox in Shell-Skript ohne Programmieren?
Eszett
04.03.08
09:53
Hat jemand eine Idee, wie man ein banales, klassisches Shell-Skript mit einer grafischen Abfrage anreichern könnte? So in etwa "wollen Sie das Filet wirklich deleten?"? Es wäre schön, wenn das ganze ohne Programmieren ginge, vielleicht mit dem Automator oder mit AppleScript o.ä.?
Hilfreich?
0
Kommentare
oefinger
04.03.08
10:33
Leider verbietet Apple die Einbindung von User Interaktionen in Shell Skripte über osascript. Du kannst allerdings von einem AppleScript Shell Skripte über den "do shell skript" Befehl aufrufen.
Hilfreich?
0
_mäuschen
04.03.08
10:52
Oder mit Hilfe von Variablen (bitte selbst shellen)
Exporting shell variables to AppleScripts
Hilfreich?
0
quarx
04.03.08
10:58
oefinger: wenn man ein
tell application "System Events" ...
drumrumschaltet, klappen Dialogboxen auch vom Terminal aus:
osascript -e 'tell application "System Events" to display dialog "Hallo Welt!"'
Hilfreich?
0
Eszett
04.03.08
11:05
danke, klingt schon einmal interessant. Wichtig ist aber auch, daß mein Shell-Skript auch mitkriegt, ob der Anwender nun den "ja"- oder den "nein"-Knopf betätigt hat. Ob das auch geht?
Hilfreich?
0
jgraux
04.03.08
11:43
Man kann den Rückgabewert auswerten und dann weitermachen oder auch nicht, z.B.
osascript -e 'tell application "System Events" to display dialog "Wirklich löschen?"' && echo "hallo"
Das "hallo" wird nur ausgegeben, wenn der User im Dialog auf OK geklickt hat und nicht wenn er auf Abbrechen geklickt hat.
Hilfreich?
0
oefinger
04.03.08
12:43
quarx
Das hätte ich vor ein paar Wochen wissen sollen
Hilfreich?
0
Eszett
04.03.08
12:52
Klingt super. Werde es sobald wie möglich ausprobieren. Vielen Dank Euch allen!
Hilfreich?
0
_mäuschen
04.03.08
14:18
Einfacher gehts' mit einer temporären Datei
osascript -e 'tell application "System Events" to display dialog "Wirklich loeschen?" buttons {"No","Yes"} default button 1 with icon 0' > /tmp/tempo_answer
answer=`awk '{print $2}' /tmp/tempo_answer`
if [ "$answer" = "returned:Yes" ]
then echo "User says Yes"
else echo "Hell No"
fi
rm /tmp/tempo_answer
Hilfreich?
0
Eszett
05.03.08
09:03
So, hab's mal ausprobiert, und in der Tat, die letzte Version mit der temporären Datei ist die eleganteste
, nur das mit dem awk hat nicht funktioniert, geht aber auch ohne.
Das einzige, was jetzt noch zur Perfektion fehlt, ist die Lokalisierung. Ich habe schon einmal das Environment der Shell angeschaut, aber sowas wie de.lproj o.ä. nicht gefunden. Gibt es da vielleicht auch was von ratziofarm bzw. Applescript?
Hilfreich?
0
Gaspode
05.03.08
09:20
Schönes Script. Eine temporäre Datei die global für alle User gilt und immer den selben Namen hat.
So werden lokale Exploits bereitgestellt. So sollte man gar nicht erst anfangen zu programmieren, das ist Visual Basic Niveau!
Hilfreich?
0
Eszett
05.03.08
09:44
Gaspode
(...)So sollte man gar nicht erst anfangen zu programmieren, das ist Visual Basic Niveau!
Und Du hast Deppenleerzeichen geschrieben. Keinkörper ist perfekt.
Hilfreich?
0
Gaspode
05.03.08
10:10
Hmm, was fehlt? Der Bindestrich vor Niveau?
Das ist aber zumindest kein Sicherheitsloch
Hilfreich?
0
Eszett
05.03.08
10:35
und "denselben". Und die Typen heißen nicht Juhsa, sondern Anwender. Und das Komma vor dem Relativsatz. Da kommt schon einiges zusammen.
Außerdem: Wie kann das ein Sicherheitsloch sein, außer daß man theoretisch das Ergebnis der Abfrage beeinflussen könnte, wenn man genau im richtigen Moment die Datei manipuliert? Das Script ist eh nur für mich, das werde ich kaum in SourceForge veröffentlichen.
Hilfreich?
0
_mäuschen
05.03.08
10:39
Tilde/Library/Caches/TemporaryItems/tempo_answer
Wann endlich versteht MTN2 die Tilde
Hilfreich?
0
Eszett
05.03.08
11:00
gute Idee mit der Tilde.
Hilfreich?
0
_mäuschen
05.03.08
11:49
Wie ist Lokalisierung zu verstehen?
buttons {"Nein","Ja"}
Oder wie?
Hilfreich?
0
Eszett
05.03.08
13:01
Ja, genau. Oder auch "oui" und "non" oder "si" und "no". Bei Programmen gibt es dazu im Paketverzeichnis unter Resources die Unterverzeichnisse fr.lproj und es.lproj usw., wo die jeweiligen landesspezifischen Daten stehen. Aber es wäre auch allein schon hilfreich, herauszufinden, was der Anwender eingestellt hat.
Hilfreich?
0
_mäuschen
05.03.08
13:35
System_Language=`defaults read .GlobalPreferences AppleLanguages | cut -c 2-3`
echo $System_Language
Hilfreich?
0
Eszett
05.03.08
14:18
G..l. Ich werd's wieder sobald wie möglich ausprobieren.
Hilfreich?
0
Eszett
06.03.08
11:18
Klappt soweit, nur daß TemporaryItems nicht existiert und der cut-Befehl nicht paßt, aber ich hab's halt einfach etwas anders gemacht, und jetzt geht's.
Vielen Dank nochmal!
Hilfreich?
0
_mäuschen
06.03.08
12:08
System_Language=`defaults read .GlobalPreferences AppleCollationOrder`
echo $System_Language
Hilfreich?
0
Eszett
07.03.08
11:25
Was könnte die Fehlermeldung:
The domain/default pair of (.GlobalPreferences, AppleCollationOrder) does not exist
bedeuten? Das Problem tritt nur dann auf, wenn das Shellscript nicht direkt von der Kommandozeile, sondern von Apples Installationsprogramm aufgerufen wird, d.h. während des Installationsvorgangs (als sogenanntes postflight). Die "AppleLanguages" gehen dann auch nicht, gleicher Fehler
. Vielleicht läuft dann das Script als "root" oder "admin", und vielleicht gibt es in diesem Modus die persönlichen Einstellungen nicht. Andererseits funktioniert die Tilde-Methode, also ein Home-Verzeichnis gibt es dann wohl doch irgendwie. Alles mysteriös, Apple hätte den Installationsvorgang irgendwie eleganter machen können, ist immer noch etwas ohnmächtig, aber immer noch besser als das bescheuerte "Fertig - hust, hust, würg - stellen" von Legasto-Microsoft.
Ich hab's aber noch nicht aufgegeben. Vielleicht kommt man irgendwie über Tilde/Preferences an die Einstellungen ran.
Hilfreich?
0
_mäuschen
07.03.08
11:47
Absoluten Pfad verwenden
defaults read TILDE/Library/Preferences/.GlobalPreferences AppleCollationOrder
Hilfreich?
0
_mäuschen
07.03.08
11:50
oder
defaults read /Library/Preferences/.GlobalPreferences AppleLanguages | cut -c 2-3
Hilfreich?
0
Eszett
07.03.08
13:16
Klingt genial. Ich probier's aus und melde, ob's geklappt hat.
Hilfreich?
0
Eszett
08.03.08
18:05
Ja, Lokalisierung scheint damit wieder zu funktionieren. Was jetzt immer noch fehlt
, ist, daß der Dialog irgendwo im Hintergrund geöffnet wird und damit erstmal unsichtbar ist. Kann man ihn irgendwie automatisch als oberstes, d.h. aktives, Fenster setzen?
Hilfreich?
0
_mäuschen
08.03.08
22:43
osascript -e 'tell application "System Events" to activate'
osascript -e 'tell application "System Events" to display dialog "Wirklich loeschen?" buttons {"No","Yes"} default button 1 with icon 0' > ~/Library/Caches/TemporaryItems/tempo_answer
answer=`awk '{print $1,$2}' ~/Library/Caches/TemporaryItems/tempo_answer`
rm ~/Library/Caches/TemporaryItems/tempo_answer
if [ "$answer" = "button returned:Yes" ]
then echo "User says Yes"
elif [ "$answer" = "button returned:No" ]
then echo "Hell No"
else echo "Nada, something went wrong"
fi
Hilfreich?
0
_mäuschen
08.03.08
23:23
Ja
die
entführte Tilde
nicht vergessen
MTN2
Hilfreich?
0
Eszett
09.03.08
20:18
Hab's gerade ausprobiert:
- geht.
- super
- Vielen Dank an den Spezialisten!
Hilfreich?
0
_mäuschen
10.03.08
18:32
Schiebe doch noch diesen osa zwischen die zwei events
osascript -e 'tell application "System Events" to beep'
Die Spezialistin
Hilfreich?
0
Eszett
11.03.08
10:41
Mach ich.
Und den "Hinweiß"
habe ich auch verstanden.
Wie konnte das passieren?!? Stets auf political correctness geachtet, intelligente Frau und zwei intelligente Töchter, und dann angenommen, osa sei nur etwas für Männer. Schande über mich! Ich korrigiere mich sogleich zu MännerInnen.
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.