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
Eszett04.03.0809: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.ä.?
0

Kommentare

oefinger
oefinger04.03.0810: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.
0
_mäuschen
_mäuschen04.03.0810:52

Oder mit Hilfe von Variablen (bitte selbst shellen)

Exporting shell variables to AppleScripts


0
quarx
quarx04.03.0810: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!"'
0
Eszett
Eszett04.03.0811: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?
0
jgraux04.03.0811: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.
0
oefinger
oefinger04.03.0812:43
quarx

Das hätte ich vor ein paar Wochen wissen sollen
0
Eszett
Eszett04.03.0812:52
Klingt super. Werde es sobald wie möglich ausprobieren. Vielen Dank Euch allen!
0
_mäuschen
_mäuschen04.03.0814: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

0
Eszett
Eszett05.03.0809: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?
0
Gaspode05.03.0809: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!
0
Eszett
Eszett05.03.0809: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.
0
Gaspode05.03.0810:10
Hmm, was fehlt? Der Bindestrich vor Niveau?

Das ist aber zumindest kein Sicherheitsloch
0
Eszett
Eszett05.03.0810: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.
0
_mäuschen
_mäuschen05.03.0810:39

Tilde/Library/Caches/TemporaryItems/tempo_answer



Wann endlich versteht MTN2 die Tilde


0
Eszett
Eszett05.03.0811:00
gute Idee mit der Tilde.
0
_mäuschen
_mäuschen05.03.0811:49

Wie ist Lokalisierung zu verstehen?

buttons {"Nein","Ja"}


Oder wie?


0
Eszett
Eszett05.03.0813: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.
0
_mäuschen
_mäuschen05.03.0813:35

System_Language=`defaults read .GlobalPreferences AppleLanguages | cut -c 2-3`
echo $System_Language


0
Eszett
Eszett05.03.0814:18
G..l. Ich werd's wieder sobald wie möglich ausprobieren.
0
Eszett
Eszett06.03.0811: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!
0
_mäuschen
_mäuschen06.03.0812:08

System_Language=`defaults read .GlobalPreferences AppleCollationOrder`
echo $System_Language


0
Eszett
Eszett07.03.0811: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.
0
_mäuschen
_mäuschen07.03.0811:47

Absoluten Pfad verwenden

defaults read TILDE/Library/Preferences/.GlobalPreferences AppleCollationOrder


0
_mäuschen
_mäuschen07.03.0811:50

oder

defaults read /Library/Preferences/.GlobalPreferences AppleLanguages | cut -c 2-3


0
Eszett
Eszett07.03.0813:16
Klingt genial. Ich probier's aus und melde, ob's geklappt hat.
0
Eszett
Eszett08.03.0818: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?
0
_mäuschen
_mäuschen08.03.0822: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


0
_mäuschen
_mäuschen08.03.0823:23

Ja


die entführte Tilde nicht vergessen


MTN2


0
Eszett
Eszett09.03.0820:18
Hab's gerade ausprobiert:

- geht.
- super
- Vielen Dank an den Spezialisten!
0
_mäuschen
_mäuschen10.03.0818:32



Schiebe doch noch diesen osa zwischen die zwei events

osascript -e 'tell application "System Events" to beep'

Die Spezialistin





0
Eszett
Eszett11.03.0810: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.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.