Como faço para desmontar uma unidade com um script?

3

Eu instalei o sleepwatcher para rodar ~/.sleep antes que meu computador entre no modo de suspensão.

Eu preciso desmontar /Volumes/Backup antes que meu computador adormeça. Se eu esquecer de fazê-lo, recebo uma mensagem dizendo que desmontei a unidade, etc., quando o computador é retomado. É uma falha de unidade externa rara da Seagate. Sorte minha.

Então, eu estou tentando resolver o problema com o Sleepwatcher desmontando a unidade antes que o sistema durma. Obviamente sudo e a senha que requer está parada no meu caminho.

Alguma ideia?

Eu não posso usar o echo "password" | sudo -S xx xx método porque minha senha contém um sinal de dólar ($), então eu preciso de outra forma de injeção.

Se eu remover o requisito de senha de /etc/sudoers, o sistema se torna muito inseguro.

Então, alguma ideia criativa?

Frank Barcenas
fonte

Respostas:

5

Você não precisa sudo para desmontar uma unidade.

Usar diskutil

O comando a seguir ejeta o volume Backup:

diskutil eject /Volumes/Backup

Isso deve acontecer, embora (IIRC) você queira…

diskutil unmount /Volumes/Backup

… Para facilitar a montagem sem ter que desconectar fisicamente / reconectar a unidade.

Ejetando todos os discos

Se você quer ter certeza de ter ejetado todos os seus discos, você pode tentar isto:

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

Ferramenta de terceiros: montanha

Há também Montanha que irá automatizar isso para você.

Ferramenta de Terceiros: Teclado Maestro

Acima de todas as outras ideias, eu recomendaria Teclado Maestro que pode fazer todas essas coisas durante o sono e remontar sua unidade ao despertar, além de 1.000 outras coisas.

TJ Luoma
fonte
1

Você pode ter um "$" na sua declaração de eco, você só tem que escapar dela.

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

Contudo

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

Além disso, em vez de usar aspas duplas, use aspas simples para encapsular sua string:

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

Basicamente, o que está acontecendo é que dentro aspas duplas ("), ele preserva os valores literais dos caracteres, com exceção do cifrão (" $ "), do til (" ~ ") e da barra invertida (" \ "). Quando você coloca o texto dentro de um citação única ('), preserva todos os caracteres, ponto final.

Modifique seu sudoers Arquivo.

Com isso esclarecido, não salve / use senhas em texto claro em seu script, pois é igualmente inseguro!

Em vez disso, o que você deve fazer é modificar o seu sudoers arquivo para que você conceda acesso "sem senha" somente a esse comando.

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

Com esse método, você deixa a segurança do sistema intacta e permite o uso de sudo sem senha para este comando específico.

Allan
fonte