这里有几件事会导致一些问题。
首先,当您使用exec
在 shell 中生成进程时,这意味着您想用您提到的程序替换现有的 shell 进程。当您在 SSH 会话中执行此操作时,您将替换 SSH 守护程序启动的 shell 进程(并且您打算用来登录)。然后 SSH 将等待该进程退出(直到卸载卷),这就是您看到挂起的原因。您需要跳过exec
shell 配置中的 ,这将在不替换 shell 的情况下生成进程。
其次,您看到错误的原因是安装过程被设计为运行一次,正如您所注意到的。如果你想跳过已经挂载的文件夹,你可以使用类似下面的东西作为你的 shell 脚本:
#!/bin/sh
if ! grep " $HOME/Documents/examplefolder " /proc/mounts
then
rclone mount remoterep:/examplefolder ~/Documents/examplefolder
fi
请注意引号内的空格,以确保您没有意外匹配其他内容。这将确保您的脚本不会尝试多次挂载。
第三,您可能希望在后台运行此命令并与 shell 分离,以便 shell 的退出不会导致它接收SIGHUP
和退出(或重新启动,取决于它的配置方式)。您可以通过将 shell 配置中的调用编写为nohup ~/mount_examplefolder >/dev/null 2>&1 &
. nohup
防止程序接收SIGHUP
和重定向输出 防止它nohup.out
在各处打印消息或创建文件。
最后,您可能(或可能不)希望将其配置为仅在您使用交互式 shell 时运行;也就是说,当您登录以启动 shell 以进行交互使用而不是脚本使用时。如果是这样,您可以在设置时调用nohup
条件,PS1
如下所示:
if [ -n "$PS1" ]
then
nohup ~/mount_examplefolder >/dev/null 2>&1 &
fi