Inicia o script, montando e ligando dependendo de se as unidades estão presentes?

1

Qual é o código para executar um script na inicialização que vincula as pastas base a outras pastas, dependendo da presença de uma unidade?

Como a maioria dos meus arquivos são mantidos em unidades e locais separados de / home / John / Folder, eu uso o código do Terminal para vincular as pastas "Página inicial" a lugares diferentes. Por exemplo, eu ligo a pasta / Documents com / Dropbox / Documents, então é constantemente feito o backup. Descobri como fazer isso através do terminal e li em algum lugar que você pode colocar código no script /etc/rc.local e que esse script (rc.local) é executado na inicialização. Coloquei o código nesse script, mas não sei como fazer isso funcionar na inicialização. Agora eu tenho que esperar até que o computador tenha iniciado, em seguida, execute o código no terminal. O código completo nesse script que eu defini está abaixo.

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

A exit 0 é necessária para a execução do script, de acordo com um comentário no script.

Como isso em um laptop e eu mantenho meus arquivos de vídeo em um drive externo, existe uma maneira simples de adicionar um simples "If is present, também bind ~ / Videos to / media // Videos," e se não for, pular acima dele? Ou colocar esse código no final para não afetar a execução acima?

    
por John 03.02.2011 / 17:32

2 respostas

2

Existem vários problemas com o seu script:

  1. Você está encadeando (& amp; & amp;) comandos não relacionados, uma falha em um deles irá ignorar o restante.
  2. Você está usando "~" no nome do caminho, o script é chamado com raiz, o que significa que ele será traduzido em / root, você deve usar o nome completo do caminho
  3. Você não precisa usar o sudo porque ele está em execução com o root.

O script a seguir fará o que você solicitou:

[[ -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
    
por João Pinto 03.02.2011 / 19:50
0

Em um script 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

Você também pode parar de usar o & amp; & amp; deste jeito. (Se você tiver command1 && command2 , o comando2 será executado se e somente se o comando1 tiver saído com o código de saída 0 (sucesso).) E você tem alguma rede local, alguma. A parte da rede pode pertencer a scripts colocados em /etc/network/if-up.d e /etc/network/if-down.d. A parte local pode pertencer em /etc/rc.local - para parar de usar o comando sudo.

    
por user8290 03.02.2011 / 18:12