1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Wie sag ich im Terminal...

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von Kernelpanik, 19.02.08.

  1. Kernelpanik

    Kernelpanik Ingol

    Dabei seit:
    05.03.04
    Beiträge:
    2.098
    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.
     
  2. AgentSmith

    AgentSmith Hochzeitsapfel

    Dabei seit:
    15.07.07
    Beiträge:
    9.361
    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..)
     
  3. MacAlzenau

    MacAlzenau Golden Noble

    Dabei seit:
    26.12.05
    Beiträge:
    19.398
    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.
     
  4. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    killall -m iChat

    :p
     
  5. Kernelpanik

    Kernelpanik Ingol

    Dabei seit:
    05.03.04
    Beiträge:
    2.098
    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.
     
  6. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.896
    Code:
    osascript -e 'tell application "iChat" to log out'
     
    Kernelpanik gefällt das.
  7. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    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.
     
  8. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.896
    Vergesst crontab. Komplett.
    cron wird genauso aus dem System rausfliegen wie init.
    Wundert mich dass er in Leo immer noch drin zu sein scheint.
     
  9. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.896
    Da hast du wohl recht. In der Shell geht schon um einiges mehr. :)
     
  10. Kernelpanik

    Kernelpanik Ingol

    Dabei seit:
    05.03.04
    Beiträge:
    2.098
    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...
     
  11. stk

    stk Grünapfel

    Dabei seit:
    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
     
  12. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.896
    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.)
    :)

    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?
     
  13. Bier

    Bier Pomme au Mors

    Dabei seit:
    24.08.07
    Beiträge:
    867
    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.
     
  14. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    Ins Terminal posten:

    say -v bruce 'terminal, please tell ichat to log out all these silly accounts'
    say -v princess 'yes, sir'

    :cool::-*:innocent:
     
  15. AgentSmith

    AgentSmith Hochzeitsapfel

    Dabei seit:
    15.07.07
    Beiträge:
    9.361
    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. :)
     

Diese Seite empfehlen