Wie kann ich ein Laufwerk mit einem Skript unmounten?

Ich habe Sleepwatcher so installiert, dass es ausgeführt wird, ~/.sleepbevor mein Computer in den Ruhezustand wechselt.

Ich muss die Bereitstellung aufheben /Volumes/Backup, bevor mein Computer einschläft. Wenn ich es vergesse, erhalte ich eine Meldung, die mir mitteilt, dass ich das Laufwerk usw. unsicher getrennt habe, wenn der Computer wieder hochfährt. Es ist ein seltener externer Seagate-Laufwerksfehler. Ich Glückspilz.

Also versuche ich, das Problem mit Sleepwatcher zu beheben, indem ich das Laufwerk aushänge, bevor das System in den Ruhezustand wechselt. Offensichtlich sudosteht mir das benötigte Passwort im Weg.

Irgendwelche Ideen?

Ich kann die Methode nicht verwenden echo "password" | sudo -S xx xx, weil mein Passwort ein Dollarzeichen ($) enthält, also brauche ich eine andere Form der Injektion.

Wenn ich die Passwortanforderung aus entferne /etc/sudoers, wird das System sehr unsicher.

Also irgendwelche kreativen Ideen?

Antworten (2)

Sie müssen ein Laufwerk nicht sudoaushängen.

Verwendendiskutil

Der folgende Befehl wirft das Volume aus Backup:

diskutil eject /Volumes/Backup

Dies sollte es tun, obwohl (IIRC) Sie vielleicht möchten ...

diskutil unmount /Volumes/Backup

…um das erneute Mounten zu erleichtern, ohne das Laufwerk physisch trennen/wieder anschließen zu müssen.

Auswerfen aller Datenträger

Wenn Sie sicherstellen möchten, dass Sie alle Ihre Festplatten ausgeworfen haben, können Sie Folgendes versuchen:

osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'

Tool von Drittanbietern: Berg

Es gibt auch Mountain , das dies für Sie automatisiert.

Tool von Drittanbietern: Keyboard Maestro

Vor allem würde ich Keyboard Maestro empfehlen , das all diese Dinge im Ruhezustand erledigen und Ihr Laufwerk im Wachzustand wieder einhängen kann, sowie 1.000 andere Dinge.

Sie können ein "$" in Ihrer Echo-Anweisung haben, Sie müssen es nur maskieren.

$ echo "$abc123"
                         <-----Results in a blank line

Jedoch

$ echo "\$abc123"
$abc123                  <-----Works

Verwenden Sie außerdem anstelle von doppelten Anführungszeichen einfache Anführungszeichen, um Ihre Zeichenfolge zu kapseln:

$echo '$abc123'
$abc123                  <-----Works

Was im Grunde passiert, ist, dass innerhalb doppelter Anführungszeichen (") die wörtlichen Werte der Zeichen mit Ausnahme des Dollarzeichens ("$"), der Tilde ("~") und des umgekehrten Schrägstrichs ("\" beibehalten werden. ).Wenn Sie Ihren Text in ein einfaches Anführungszeichen (') setzen, bleiben alle Zeichen und der Punkt erhalten.

Ändern Sie Ihre sudoersDatei.

Wenn das geklärt ist, speichern/verwenden Sie keine Passwörter im Klartext in Ihrem Skript, da dies ebenso unsicher ist!

Stattdessen sollten Sie Ihre sudoersDatei so ändern, dass Sie nur diesem Befehl "kein Passwort" Zugriff gewähren.

username ALL = (ALL) ALL
username ALL = (root) NOPASSWD: /path/to/foo/bar/command

Mit dieser Methode lassen Sie Ihre Systemsicherheit intakt und ermöglichen die Verwendung sudoohne Passwort für diesen einen bestimmten Befehl.