什么代码可以使脚本在启动时运行,并根据驱动器是否存在将主文件夹与其他文件夹绑定?
由于我的大多数文件都保存在与 /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
您的脚本存在多个问题:
- 您正在链接(&&)不相关的命令,一个命令失败将跳过其余命令。
- 您在路径名中使用了“~”,脚本以 root 身份调用,这意味着它将被翻译成 /root,您必须使用完整路径名
- 您不需要使用 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 命令。