启动脚本、安装和绑定取决于驱动器是否存在?

启动脚本、安装和绑定取决于驱动器是否存在?

什么代码可以使脚本在启动时运行,并根据驱动器是否存在将主文件夹与其他文件夹绑定?

由于我的大多数文件都保存在与 /home/John/Folder 不同的驱动器和位置,因此我使用终端代码将主文件夹绑定到不同位置。例如,我将 /Documents 文件夹与 /Dropbox/Documents 绑定,以便不断备份。我已经找到了如何通过终端执行此操作的方法,并在某处读到,您可以将代码放入 /etc/rc.local 脚本中,并且该脚本 (rc.local) 在启动时运行。我已将代码放入该脚本中,但我不知道如何让它在启动时运行。现在我必须等到计算机启动后,然后在终端中运行代码。我设置的该脚本中的完整代码如下。

sudo mount -o bind /media/Storage/Music ~/Music && sudo mount -o bind /media/storage/downloads ~/Downloads && sudo mount -o bind /media/2TB/Videos ~/Videos && sudo mount -o bind /home/john/dropbox/documents ~/Documents && sudo mount -o bind /home/john/dropbox/Photos ~/Pictures && exit 0

出口 0根据脚本中的注释,脚本运行需要。

由于这是在笔记本电脑上进行的,而我将视频文件保存在外部驱动器上,有没有办法添加一个简单的“如果存在,也将 ~/Videos 绑定到 /media//Videos”,如果不存在,则跳过它?或者将该代码放在最后,这样它就不会影响上述执行?

答案1

您的脚本存在多个问题:

  1. 您正在链接(&&)不相关的命令,一个命令失败将跳过其余命令。
  2. 您在路径名中使用了“~”,脚本以 root 身份调用,这意味着它将被翻译成 /root,您必须使用完整路径名
  3. 您不需要使用 sudo 因为它以 root 身份运行。

以下脚本将执行您的请求:

[[ -d /media/Storage/Music ]] &&  mount -o bind /media/Storage/Music /home/your_user/Music 
[[ -d /media/storage/downloads ]] && mount -o bind /media/storage/downloads /home/your_user/Downloads
[[ -d /media/2TB/Videos ]] && mount -o bind /media/2TB/Videos /home/your_user/Videos 
mount -o bind /home/john/dropbox/documents /home/your_user/Documents 
mount -o bind /home/john/dropbox/Photos /home/your_user/Pictures
exit 0

答案2

在 BASH 脚本中...

#check for existence of a directory
if [ ! -d /media/Videos ]; then
    // do nothing or echo "not available"
else
    // action
fi

#check for existence of a file
if [ ! -f /media/Videos/i_am_mounted ]; then
    // do nothing or echo "not available"
else
    // action
fi

您还可以通过这种方式停止使用 &&。(如果有command1 && command2,则当且仅当 command1 以退出代码 0(成功)退出时,才会执行 command2。)并且您有一些本地、一些网络。网络部分可能属于放置在 /etc/network/if-up.d 和 /etc/network/if-down.d 中的脚本。本地部分可能属于 /etc/rc.local - 以停止使用 sudo 命令。

相关内容