• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

Wie sag ich im Terminal...

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.295
Hallo Leute,
dies ist eigentlich als Sammeltread gedacht. Ich mache mal den Anfang. Wie sag ich im Terminal, iChat soll alle Accounts ausloggen? Im Skript ist das einfach: "tell application "iChat" to log out" aber im Terminal funzt das net.
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
Ich wage mal zu behaupten, dass im Terminal nicht alles geht, was in einem Skript geht. (Außer natürlich man stösst per Terminal ein Skript an..)
 

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.473
Wieso soll man auch via Terminal Zugriff auf bestimmte Programme haben und das, was sie tun?
iChat hat halt eine Schnittstelle zu AppleScript, sonst ginge das ja auch nicht.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.295
Dann ist launchd doch kein Ersatz für Crontab. In Crontab kann man Skripte ausführen. Launchd wird aber als Ersatz für Crontab angepriesen.
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

Dann ist launchd doch kein Ersatz für Crontab. In Crontab kann man Skripte ausführen. Launchd wird aber als Ersatz für Crontab angepriesen.

whow! Ein doppelter Accelschweiss mit eingesprungenem Sitzberger! Das ist mal ein Rückschluß von ganz hinten durch die Brust genau ins Auge:

a) die ursprüngliche Fragestellung zielte auf die Durchführung von AppleScripten in der Shell ab. Das hat weder was mit launchd noch mit cron(tab) zu tun

b) als Kommando kannst Du im crontab kein AppleScript eintragen - jedenfalls nicht anders als in launchd auch*. Siehe die osascript-Notation von rastafari.

c) launchd ist insoweit - weil an der Stelle funktional 1:1 zu crontab - sehr wohl ein Ersatz für crontab. Die Einschränkungen liegen bestenfalls in den Wildcards für die Zeitangaben. Da lasse ich gelten, das launchd gegenüber crontab noch Nachholbedarf hat.

Gruß Stefan

*man 5 crontab
Code:
The entire command portion of the line, 
up to a newline or % character, will be 
executed by /bin/sh or by the shell 
specified in the SHELL variable of the cronfile.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.295
Wie kann ich denn launchd Einträge kontrollieren ob sie laufen ohne vor dem Computer auszuharren bis die Zeit kommt. Auch löscht es immer die Apostroph in den Einträgen z.B. aus: osascript -e 'tell application "iChat" to log out' macht es: osascript -e tell application "iChat" to log out
Ob das dann noch funktioniert...
 

stk

Grünapfel
Registriert
05.01.04
Beiträge
7.141
Moin,

launchctl list liefert Dir eine Übersicht über alle Jobs, die launch verwaltet. Sehr viel übersichtlicher finde ich pers. allerdings die GUI dafür in Form von Lingon.

Alles was bei direkter Eingabe im Terminal läuft, sollte auch als launchd Aufruf direkt funktionieren. Und wenn Du den Einzeiler so nicht unterbringst, dann pack ein Shebang davor und sichere es als Shellscript, dem Du einen kurzen Namen gibst, der auch launchd gefällt.

Gruß Stefan
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Wie kann ich denn launchd Einträge kontrollieren ob sie laufen ohne vor dem Computer auszuharren bis die Zeit kommt.
Du kannst auch einfach in die Kneipe einen saufen gehen bis die Zeit kommt.

(Es sei denn, deine bessere Hälfte heisst zufällig "Monika Zeit" oder so ähnlich. Dann geht das natürlich so nicht. Da solltest du dich dann schon eher selber drum kümmern.)
:)

Auch löscht es immer die Apostroph in den Einträgen z.B. aus: osascript -e 'tell application "iChat" to log out' macht es: osascript -e tell application "iChat" to log out
Ob das dann noch funktioniert...
Wer ist "es"?

Wenn du das in der Shell so eingibst wie beschrieben, nimmt sich die Shell diese Single-Quotes weg. Daran erkennt sie, dass der gesamte String danach zusammen ein einzelnes Argument sein soll, das an "osascript" übergeben wird. Dieses Programm ist dann mit diesem einen Argument glücklich und braucht die Quotes nicht mehr. Die Shell übergibt sie nicht mit, das nennt sich "Quote removal" ---> man bash.

Um das zu verstehen, hilft vielleicht das hier. Stell dir vor, anstatt osascript würdest du ein imaginäres Skript namens "blaukraut" aufrufen. "blaukraut" sieht nur wie folgt aus:
Code:
cat ./blaukraut
[COLOR="DarkRed"]#!/bin/sh
echo "Das ist Arg 1:  ${1}"
echo "Das ist Arg 2:  ${2}"
echo "Das ist Arg 3:  ${3}"
## EOF [/COLOR] 

./blaukraut  otto  willi  paul
[COLOR="DarkRed"]Das ist Arg 1:  otto
Das ist Arg 2:  willi
Das ist Arg 3:  paul [/COLOR] 

./blaukraut  'otto   willi   paul'
[COLOR="DarkRed"]Das ist Arg 1:  otto   willi   paul
Das ist Arg 2:
Das ist Arg 3: [/COLOR] 

./blaukraut  'otto gustav'  'willi gerd'  'paul toni'
[COLOR="DarkRed"]Das ist Arg 1:  otto gustav
Das ist Arg 2:  willi gerd
Das ist Arg 3:  paul toni [/COLOR] 

./blaukraut  -av  'otto = paul'  toni  sepp
[COLOR="DarkRed"]Das ist Arg 1:  -av
Das ist Arg 2:  otto = paul
Das ist Arg 3:  toni [/COLOR]
Logisch?
 

Bier

Pomme au Mors
Registriert
24.08.07
Beiträge
867
Ich wage mal zu behaupten, dass im Terminal nicht alles geht, was in einem Skript geht. (Außer natürlich man stösst per Terminal ein Skript an..)

Ich wage es, das Gegenteil zu behaupten, und sogar noch mehr:

Code:
osascript -e 'tell application "foo" to quit'

z. B.

Im Appleskript Bereich ist tell recht mächtig verwendbar. Du kannst eine ziemlich weitreichende Palette an Anweisungen verwenden, von tell <Finder> to <empty trash> bis hin zu Genanntem.

Code:
osascript -e 'tell application "Dock" to quit'

Natürlich kannst Du auch, um im Terminal zu bleiben, via vim, nano oder mcedit ein Skript in zsh, Appleskript, [...], schreiben und ausführen. Bei vielen osX Apps ist die Backgroundfunktionalität über Appleskript realisiert und daher steuerbar.
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
Ich wage es, das Gegenteil zu behaupten, und sogar noch mehr:
Wenn du meinen Beitrag nochmal liest, wirst du feststellen, dass du gar nicht das Gegenteil behauptest. :)
Du führst nur genauer aus, was ich meinte.
Ich sagte ja: Im Terminal geht nicht alles, was in einem (Apple-)skript geht. Außer natürlich, man stösst ein Script an, und nichts anderes tut osascript.
Grundsätzlich bleibe ich bei der Aussage, dass im Terminal unter Verzicht auf das Ausführen eines Skripts nicht zwangsläufig alles möglich ist, was in einem Skript geht. Wenn eine Applikation ein AS-Interface hat heißt das ja nicht zwangsläufig, dass sämtliche darüber erzielbare Funktionalität auch als Parameterübergabe in der Shell implementiert wurde.
Dass die Shell insgesamt mächtiger ist, streite ich mit der Aussage übrigens auch nicht im Geringsten ab.

Aber es freut mich wenn ich der Kleinkariertheit von manchen hier ein wenig Befriedigung verschaffen konnte. ;)
(Disclaimer: Das ist nicht bösartig gemeint, sondern wirklich nur ein Augenzwinkern.)


Danke übrigens Rastafari für das ausführliche Beispiel in #12, ein angenehmer Beitrag. :)