Come si smonta un'unità con uno script?

3

Ho installato sleepwatcher per eseguire ~/.sleep prima che il computer vada in stop.

Devo smontare /Volumes/Backup prima che il mio computer si addormenti. Se mi dimentico di farlo, ricevo un messaggio che mi informa che ho smontato il drive, ecc., Quando il computer riprende. È un raro problema di guida esterna di Seagate. Fortunato me.

Quindi sto cercando di risolvere il problema con Sleepwatcher smontando l'unità prima che il sistema dorme. Ovviamente sudo e la password richiesta sono in piedi sulla mia strada.

Qualche idea?

Non posso usare il metodo echo "password" | sudo -S xx xx perché la mia password contiene un segno di dollaro ($), quindi ho bisogno di un'altra forma di iniezione.

Se rimuovo il requisito della password da /etc/sudoers , il sistema diventa molto insicuro.

Quindi qualche idea creativa?

    
posta Frank Barcenas 15.11.2018 - 01:01
fonte

2 risposte

5

Non è necessario sudo per smontare un'unità.

Utilizza diskutil

Il seguente comando espelle il volume Backup :

diskutil eject /Volumes/Backup

Questo dovrebbe farlo, anche se (IIRC) potresti volere ...

diskutil unmount /Volumes/Backup

... per facilitare il rimontaggio senza dover disconnettere / riconnettere fisicamente l'unità.

Espulsione di tutti i dischi

Se vuoi assicurarti di aver espulso tutti i tuoi dischi, puoi provare questo:

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

Strumento di terze parti: Montagna

C'è anche Montagna che lo automatizzerà per te.

Strumento di terze parti: tastiera Maestro

Al di sopra di tutte le altre idee, consiglierei Keyboard Maestro che può fare tutte queste cose durante il sonno e rimontare l'unità sulla scia, più altre 1.000 cose.

    
risposta data 15.11.2018 - 14:10
fonte
1

Puoi avere un "$" nella tua dichiarazione di eco, devi solo scappare.

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

Tuttavia

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

Inoltre, invece di usare virgolette doppie, usa virgolette singole per incapsulare la tua stringa:

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

In sostanza, ciò che sta accadendo è all'interno di doppi apici ("), conserva i valori letterali dei caratteri ad eccezione del simbolo del dollaro (" $ "), della tilde (" ~ ") e della barra rovesciata (" \ "). Quando si racchiude il testo all'interno di un citazione singola ('), conserva tutti i caratteri, periodo .

Modifica il tuo file sudoers .

Detto questo, non salvare / utilizzare password in testo non crittografato nel tuo script poiché è ugualmente insicuro!

Invece, ciò che dovresti fare è modificare il file sudoers in modo che tu conceda l'accesso "no password" solo a quel comando.

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

Con questo metodo, lasci intatta la sicurezza del tuo sistema e consenti l'utilizzo di sudo senza password per questo particolare comando.

    
risposta data 15.11.2018 - 11:15
fonte

Leggi altre domande sui tag