¿Cómo desmontar una unidad con un script?

3

Instalé Sleepwatcher para ejecutar ~/.sleep antes de que mi computadora se apague.

Necesito desmontar /Volumes/Backup antes de que mi computadora se duerma. Si me olvido de hacerlo, recibo un mensaje que me dice que desmonté el disco de forma insegura, etc., cuando se reanude la computadora. Es un fallo externo de la unidad Seagate. Suerte la mía.

Así que estoy tratando de solucionar el problema con Sleepwatcher desmontando la unidad antes de que el sistema se detenga. Obviamente, sudo y la contraseña que requiere se interponen en mi camino.

¿Alguna idea?

No puedo usar el método echo "password" | sudo -S xx xx porque mi contraseña contiene un signo de dólar ($), así que necesito otra forma de inyección.

Si elimino el requisito de contraseña de /etc/sudoers , el sistema se vuelve muy inseguro.

Entonces, ¿alguna idea creativa?

    
pregunta Frank Barcenas 15.11.2018 - 01:01

2 respuestas

5

No necesita sudo para desmontar una unidad.

Usa diskutil

El siguiente comando expulsa el volumen Backup :

diskutil eject /Volumes/Backup

Esto debería hacerlo, aunque (IIRC) es posible que desee ...

diskutil unmount /Volumes/Backup

... para que sea más fácil volver a montar sin tener que desconectar / reconectar físicamente la unidad.

Expulsando todos los discos

Si desea asegurarse de haber expulsado todos sus discos, puede intentar esto:

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

Herramienta de terceros: Montaña

También hay Mountain que automatizará esto para usted.

Herramienta de terceros: Teclado Maestro

Por encima de todas las demás ideas, recomendaría Keyboard Maestro que puede hacer todas estas cosas en reposo y volver a montar su unidad en velatorio, más 1,000 otras cosas.

    
respondido por el TJ Luoma 15.11.2018 - 14:10
1

Puedes tener un "$" en tu declaración de eco, solo debes escapar de él.

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

Sin embargo

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

Además, en lugar de usar comillas dobles, use comillas simples para encapsular su cadena:

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

Básicamente, lo que está pasando es que dentro de comillas dobles ("), conserva los valores literales de los caracteres con la excepción del signo de dólar (" $ "), la tilde (" ~ ") y la barra diagonal (" \ "). Cuando encierre el texto dentro de un comilla simple ('), conserva todos los caracteres, punto .

Modifique su archivo sudoers .

Con eso aclarado, no guarde / use contraseñas en texto sin cifrar en su script, ya que es igualmente inseguro.

En su lugar, lo que debes hacer es modificar tu archivo sudoers para que solo le des acceso "sin contraseña" a ese comando.

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

Con este método, deja intacta la seguridad de su sistema y permite el uso de sudo sin contraseña para este comando en particular.

    
respondido por el Allan 15.11.2018 - 11:15

Lea otras preguntas en las etiquetas