Versteckte Datei bei Systemstart automatisch ersetzen

D

denisxp

Mitglied
Thread Starter
Dabei seit
22.11.2015
Beiträge
3
Reaktionspunkte
0
Hallo,

ich habe mich bereits durch etliche Foreneinträge und sonstige Anleitungen im Internet gewühlt, bekomme es jedoch leider nicht hin eine versteckte Datei bei Systemstart automatisch zu ersetzen.

Manuell bewerkstellige ich dies im Terminal mit den folgenden Befehlen
Code:
rm "/Library/Application Support/CrashPlan/.ui_info"
cp "/Library/Application Support/CrashPlan/ui_info.diskstation" "/Library/Application Support/CrashPlan/.ui_info"

Ich scheitere jedoch bereits daran die Befehle als Script zu speichern, es erscheint ein Syntaxfehler "Zeilenende erwartet" bereits beim ersten Anführungszeichen. Wenn ich dieses weglasse und das Leerzeichen des Ordnernamens stattdessen mit einem Backslash maskiere erscheint der Syntaxfehler an eben diesem. Den Ordner umzubenennen ist leider keine Option.

Wahrscheinlich geht das ganze auch deutlich eleganter, würde mich sehr freuen wenn mir jemand helfen könnte diese Aktionen automatisch beim Start auszuführen!

Vielen Dank!

Viele Grüße,
Denis
 
Wer meldet denn "Zeilenende erwartet"? Dein Editor? Welcher? Vermutlich weiß er nicht, dass Du Shell-Befehle schreibst.

Jedenfalls ist's unter OS X ganz schön kompliziert, diese beiden Befehle beim Systemstart ausführen zu lassen (finde ich), egal ob Du sie in ein Skript packst oder nicht. Du musst nämlich eine plist-Datei für launchctl schreiben, diese in /Library/LaunchAgents/ ablegen und zusätzlich noch mit "sudo launchctl load -w /Library/LaunchAgents/denisxp.crashplan.plist" aktivieren. Das Format der plist-Datei schaust Du Dir am besten bei einer anderen in diesem Verzeichnis ab.

Wenn Du so etwas öfters brauchst, kannst Du Dir auch einen LaunchAgent schreiben, der bspw. immer das Skript /etc/rc.boot (gibt's noch nicht, musst Du anlegen) ausführt und Du immer nur diese Datei editierst.

edit: Es gibt sicherlich noch andere Methoden um beim Systemstart Skripte automatisch aufzurufen, aber ich finde diese Variante - sie als Teil des init-Prozesses einzurichten - am sinnvollsten.
 
Hallo,

und danke für die Antwort.

Ich schreibe im Skript-Editor. Ist das nicht die richtige Wahl?

Wie speichere ich das Skript denn korrekt und ausführbar ab?

So langsam vermisse ich die batch Dateien...

Viele Grüße,
Denis
 
Oh, den kannte ich wiederum nicht. Wenn ich den aufrufe, zeigt er bei mir gleich was von iCloud an ...das ist mir nicht so geheuer. Ich komme aus der Linux-Ecke und benutze für kleine Shell-Skripte auch einen Editor in der Shell (vim). Bei größeren Sachen Sublime oder Atom.

P.S.: Nein, den batch-Skripten musst Du wahrlich nicht hinterher trauern. Mit OS X hast Du ein richtiges Unix und kannst in der Shell viel mehr machen, wobei die Shell-Skripte sogar viel leserlicher sind als batch-Dateien.
 
Stimmt, der Standard-Speicherort ist die iCloud, ich speichere allerdings alles ohne Probleme lokal.

Als was für eine Datei soll ich das Skript denn speichern um es automatisch ausführen lassen zu können?
.sh, .scpt, .command?
Und die Befehle einfach so mit Anführungszeichen, ohne Backslash sind in Ordnung?

Was die Batch angeht hast du wohl recht, mit der kannte ich mich allerdings aus...

Vielen Dank.
 
Endungen sind prinzipiell egal, wichtig ist hingegen, dass Du die Datei ausführbar machst (chmod +x <Dateiname>), aber als Konvention nennen viele ihre Skripte trotzdem ".sh". Die Befehle in der Datei sind so in Ordnung. Backslashes hättest Du nur dann benötigt, wenn Du keine Anführungszeichen verwendet hättest.
 
Also das AppleScript müsste folgendermassen aussehen. Kann es aber nicht testen weil ich die betreffenden Files Files nicht habe.
Code:
do shell script "rm -f '/Library/Application Support/CrashPlan/.ui_info' ; cp -f '/Library/Application Support/CrashPlan/ui_info.diskstation' '/Library/Application Support/CrashPlan/.ui_info'"
...danach noch eine LaunchAgent in /Library/LaunchAgent einrichten mit Inhalt:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableGlobbing</key>
    <true/>
    <key>Label</key>
    <string>Replace.info.diskstation</string>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>/Pfad/zum/Replace.info.diskstation.scptd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
Beachte das die Zeile "<string>/Pfad/zum/Replace.info.diskstation.scptd</string>" den Pfad und Namen zum Script enthalten muss. Wie Du das Script schliesslich benennst ist egal.
Das beste wird sein Du legst das Script in /Library/Scripts/NameDesScript.scpt
 
Zuletzt bearbeitet:
mv ist überflüssig. "cp -f ..." reicht völlig. und das kann direkt ohne osascript in den launchd job rein.
 
Zurück
Oben Unten