Я могу смонтировать свой Google Drive с помощью rclone mount gdrive: localfolder
. Я также знаю, как автоматически смонтировать удаленную файловую систему через sshfs
в vifm
. Но возможно ли использовать rclone
для автоматического монтирования облачного диска в vifm
? Я пробовал добавить следующую строку в vifmrc
:
filetype *.drive FUSE_MOUNT2|rclone %PARAM %DESTINATION_DIR
и создайте файл с именем google.drive
и следующей строкой в нем:
mount gdrive:
Когда я пытаюсь открыть файл google.drive
, vifm выводит сообщение о попытке монтирования и затем зависает навсегда.
Если говорить более обобщенно, существует ли в vifm универсальный способ обработки всех видов программ удаленного монтирования?
решение1
У меня похожая проблема, и я наткнулся на этот вопрос без ответа. Вот мое решение.
Команда rclone mount
по умолчанию остается запущенной на переднем плане, пока монтируется удаленный компьютер, выводя различные сообщения на stdout. Это отличается от, скажем, sshfs
, которая запрашивает учетные данные на переднем плане и завершает работу. Чтобы vifm
завершить процесс монтирования и принять новый пользовательский ввод, rclone mount
необходимо каким-то образом быть демонизированным. Это можно сделать с помощью --daemon
флага, однако в этом случае оказывается, что vifm
переходит в папку, которую только что создал, и отображает ее содержимое до завершения процесса монтирования. Таким образом, вы получите то, что кажется пустой папкой. Нажатие CTRL-L
(возможно, несколько раз) обновляет список файлов и отображает правильное содержимое. Однако это немного раздражает.
Другой возможный подход — написать скрипт-обертку, который демонизируется rclone mount
и ждет, пока процесс монтирования не будет завершен. Ожидание может быть достигнуто, например, с помощью inotifywait
или просто с помощью sleep
.
Скрипт-оболочка может выглядеть примерно так:
#!/usr/bin/env bash
dest=$1; shift
nohup rclone mount $* "$dest" &> /tmp/rclone_gdrive.log &
inotifywait -me open "$(dirname "$dest")" | while read line; do
echo "$line" | grep -q "$(basename "$dest")" && break
done
# or sleep 1
(Я не проверял его достаточно хорошо, так что будьте осторожны) и vifmrc
вы можете поместить туда следующее:
" Rclone mount
filetype *.drive
\ {Mount google drive with rclone}
\ FUSE_MOUNT2|<your wrapper script name> %DESTINATION_DIR %PARAM
Обратите внимание, что это %DESTINATION_DIR
идет раньше %PARAMS
(в отличие от примера в вопросе), потому что именно этого ожидает предоставленный скрипт-оболочка.
К сожалению, я не знаю ответа на более общую часть вашего вопроса.