如何使用脚本卸载驱动器?


3

~/.sleep在计算机进入睡眠状态之前安装了sleepwatcher 。

我需要/Volumes/Backup在电脑睡着之前卸下。如果我忘记这样做,我会收到一条消息,告诉我在计算机恢复时我不安全地卸下了驱动器等。这是一个罕见的外部希捷驱动器故障。幸运的我。

因此,我试图通过在系统休眠之前卸载驱动器来解决Sleepwatcher的问题。显然sudo,它需要的密码阻碍了我。

有任何想法吗?

我无法使用该echo "password" | sudo -S xx xx方法,因为我的密码包含一个美元($)符号,所以我需要另一种形式的注入。

如果我从中删除密码要求/etc/sudoers,则系统变得非常不安全。

那有什么创意吗?

Answers:


5

您无需sudo卸载驱动器。

使用 diskutil

以下命令弹出卷Backup

diskutil eject /Volumes/Backup

这应该这样做,虽然(IIRC)你可能想要......

diskutil unmount /Volumes/Backup

...无需物理断开/重新连接驱动器即可轻松重新安装。

弹出所有磁盘

如果要确保已弹出所有磁盘,可以尝试以下操作:

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

第三方工具:山

还有Mountain将为您自动化。

第三方工具:键盘大师

除了所有其他想法,我会推荐Keyboard Maestro,它可以在睡眠时完成所有这些事情,并在唤醒时重新安装你的驱动器,以及其他1,000件事。


1

你的echo语句中可以有一个“$”,你只需要逃避它。

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

然而

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

另外,使用单引号来封装字符串,而不是使用双引号:

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

基本上,正在发生的事情是在双引号(“)中,它保留字符的文字值,但美元符号(”$“),波浪号(”〜“)和反斜杠(”\“)除外当您将文本括在单引号(')中时,它会保留所有字符,句点。

修改您的sudoers文件。

清除后,不要在脚本中以明文保存/使用密码,因为它同样不安全!

相反,您应该做的是修改您的sudoers文件,以便您只授予对该命令的“无密码”访问权限。

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

使用此方法,可以保持系统安全性不变,并允许在sudo没有密码的情况下使用此特定命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.