Скрипт запуска, монтирование и привязка в зависимости от наличия дисков?

1

Что такое код для запуска скрипта при запуске, который связывает домашние папки с другими папками в зависимости от наличия диска?

Поскольку большинство моих файлов хранятся на разных дисках и в других местах, чем / 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», а если нет, пропустить его? Или поместить этот код в конец, чтобы он не влиял на выполнение выше?

Джон
источник

Ответы:

2

Есть несколько проблем с вашим скриптом:

  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
Жоао Пинту
источник
0

В 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, команда2 выполняется тогда и только тогда, когда команда 1 завершается с кодом выхода 0 (успех).) И у вас есть локальная сеть. Часть сети может принадлежать сценариям, размещенным в /etc/network/if-up.d и /etc/network/if-down.d. Локальная часть может принадлежать /etc/rc.local - чтобы прекратить использовать команду sudo.


источник
В вашем скрипте есть ошибка, если я не ошибаюсь, идея состоит в том, чтобы выполнять действия, когда каталог или файл доступны, что означает, что вы хотите использовать if [-d, без отрицания (!).
Жоау Пинту
Эх - ну, конкретного ответа нет. Замените «fi» на «else», а затем выполните действия там.