Ayuda o consejo para mi script

Ayuda o consejo para mi script

He escrito el siguiente script que puede resultarle útil si ejecuta Ubuntu en VirtualBox y utiliza NetBeans. Los scripts pueden incluso usarse para otras necesidades de VirtualBox mientras intenta:

  1. Instalar una aplicación (NetBeans).
  2. Prueba si Ubuntu se está ejecutando con adiciones de invitados.
  3. Intenta montar una carpeta compartida basada en el nombre del proyecto predeterminado que normalmente permanece igual en cualquier sistema (host o invitado).
  4. Escribe el montaje para rc.localfacilitar su uso.
  5. Crea y/o agrega un archivo en la bandeja de usuarios para permitir que la carpeta se desmonte.

El script funciona perfectamente a menos que actualice. En tal escenario, se realizarán múltiples montajes y el script de desmontaje no funcionará según lo previsto ya que habrá múltiples entradas en el archivo /etc/mtab.

Esto no se puede solucionar con el uso de umountindicadores como este, -f -l -a -tya que normalmente esto puede provocar que se desmonten todos los montajes. umount -a -t vboxsfen Tampoco /targetes la solución deseada, ya que puede que no sea necesario desmontar todas las carpetas compartidas.

Se me ocurrió una solución, pero soy nuevo en bash/scripting y no sé cómo implementarla. Mi solución es probar rc.localposibles líneas duplicadas para evitar montajes duplicados:

#!/bin/bash
#Author: Yucca Nel http://thejarbar.org
#Will restart system
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH

#Modify these variables as needed...
tempWork=/tmp/work
startupScript=/etc/init.d/rc.local
defaultNetBeansVersion=7.0.1

echo "Provide NetBeans version (7.0.1 is default) then hit [Enter] :"
  read NetBeansVersion

  if [ -z "$NetBeansVersion" ]
    then
    $NetBeansVersion=$defaultNetBeansVersion
  fi

mkdir -p /$tempWork;
cd /$tempWork;

wget http://dlc.sun.com.edgesuite.net/netbeans/7.0.1/final/bundles/netbeans-$NetBeansVersion-ml-javase-linux.sh;
sh $tempWork/*sh;


#Add Netbeans launcher to your PATH. Doing so allows you to run 'netbeans' command from the terminal
#This line will need to be changed if you changed the default install location (IOW Netbeans is not in ~/)
sudo ln -f -s ~/netbeans-$NetBeansVersion/bin/netbeans /usr/bin/;

#If you use VirtualBox , you can share your projects between Host and guest. Name of shared
#folder must match 'NetBeansProjects'
mkdir -p $HOME/NetBeansProjects

if [ -f /sbin/mount.vboxsf ]
then
    sudo /sbin/umount /home/$HOME/NetBeansProjects
    sudo /sbin/mount.vboxsf NetBeansProjects $HOME/NetBeansProjects
fi

if mountpoint -q ~/NetBeansProjects
then
#Add it to the universal start script to automate process...
    sudo sed -ie '$d' $startupScript
    echo "sudo /sbin/mount.vboxsf NetBeansProjects $HOME/NetBeansProjects"| sudo tee -a $startupScript
    echo "exit 0"| sudo tee -a $startupScript
    sudo chmod +x $startupScript

#Create a mount and unmount script file and add it to users local bin
    rm -rf $tempWork/*
    echo '#!/bin/bash' > $tempWork/netbeans-mount.sh
    echo '#!/bin/bash' > $tempWork/netbeans-umount.sh
    echo '#!/bin/bash' > $tempWork/mount-from-host.sh
    echo '#!/bin/bash' > $tempWork/unmount-from-host.sh
    echo "sudo /sbin/mount.vboxsf NetBeansProjects $HOME/NetBeansProjects" >> $tempWork/netbeans-mount.sh
    echo "sudo /sbin/mount.vboxsf NetBeansProjects $HOME/NetBeansProjects" >> $tempWork/mount-from-host.sh
    echo "sudo umount $HOME/NetBeansProjects" >> $tempWork/netbeans-umount.sh
    echo "sudo umount $HOME/NetBeansProjects" >> $tempWork/unmount-from-host.sh
    echo "exit 0" >> $tempWork/unmount-from-host.sh
    echo "exit 0" >> $tempWork/mount-from-host.sh
    echo "exit 0" >> $tempWork/netbeans-mount.sh
    echo "exit 0" >> $tempWork/netbeans-umount.sh

    sudo chmod +x $tempWork/*
    sudo mv -f $tempWork/*.sh /usr/local/bin
    rm -rf $tempWork
fi

#This function is used to cleanly exit with an error code.
function error_exit {
    sleep 7
    exit 1
}
#restart
sudo reboot
exit 0

¿Algún consejo? Mi objetivo es escribir superscripts para desarrolladores de Java que descarguen las herramientas más necesarias en cualquier Linux (no solo Ubuntu) y monten cosas potenciales que no necesitan ser reinstaladas si tiene un host de desarrollo existente. Cosas como Maven, Tomcat, SVN, JBoss no necesitan una instalación especial de invitado si ya están en el sistema host y existen más beneficios al combinar diferentes sistemas en uno; por ejemplo, Windows puede ejecutar Photoshop y el navegador Safari, pero Linux proporciona una mejor personalización y herramientas como ssh listas para usar.

Respuesta1

No estoy seguro de haber entendido... pero aquí cuento el número de líneas únicas de la salida de grep.

grep "sudo /sbin/mount.vboxsf" /etc/rc.local | sort | uniq -c | wc -l

Dos provienen de las líneas de eco y dos de las líneas de comando. Siempre debería ser igual a cuatro, ¿no?

información relacionada