Hilfe oder Rat für mein Skript

Hilfe oder Rat für mein Skript

Ich habe das folgende Skript geschrieben, das Sie möglicherweise nützlich finden, wenn Sie Ubuntu auf VirtualBox ausführen und NetBeans verwenden. Die Skripte können sogar für andere VirtualBox-Anforderungen verwendet werden, da sie Folgendes versuchen:

  1. Installieren Sie eine Anwendung (NetBeans).
  2. Testet, ob Ubuntu mit Gasterweiterungen läuft.
  3. Versucht, einen freigegebenen Ordner basierend auf dem Standardprojektnamen bereitzustellen, der normalerweise auf allen Systemen (Host oder Gast) gleich bleibt.
  4. Schreibt die Halterung auf rc.localBenutzerfreundlichkeit.
  5. Erstellt und/oder hängt eine Datei in der Benutzer-Bin an, um das Aushängen des Ordners zu ermöglichen.

Das Skript funktioniert einwandfrei, sofern Sie kein Upgrade durchführen. In einem solchen Szenario werden mehrere Mounts durchgeführt und das Unmount-Skript funktioniert nicht wie vorgesehen, da mehrere Einträge vorhanden sind /etc/mtab.

umountDies lässt sich nicht durch die Verwendung von Flags wie lösen, -f -l -a -tda dies normalerweise dazu führen kann, dass alle Mounts demontiert werden. umount -a -t vboxsfDies /targetist auch nicht die gewünschte Lösung, da es möglicherweise nicht erforderlich ist, alle freigegebenen Ordner demontieren zu müssen.

Ich habe eine Lösung gefunden, bin aber neu bei Bash/Scripting und weiß nicht, wie ich sie implementieren soll. Meine Lösung besteht darin, rc.localauf mögliche doppelte Zeilen zu testen, um doppeltes Mounten zu vermeiden:

#!/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

Irgendwelche Hinweise? Mein Ziel ist es, Superskripts für Java-Entwickler zu schreiben, die die am meisten benötigten Tools auf jedes Linux (nicht nur Ubuntu) herunterladen und potenzielle Dinge mounten, die nicht neu installiert werden müssen, wenn Sie einen vorhandenen Entwicklungshost haben. Dinge wie Maven, Tomcat, SVN, JBoss benötigen keine spezielle Gastinstallation, wenn sie bereits auf dem Hostsystem vorhanden sind, und es gibt weitere Vorteile bei der Kombination verschiedener Systeme in einem; Windows kann beispielsweise Photoshop und den Safari-Browser ausführen, aber Linux bietet bessere Anpassungsmöglichkeiten und Tools wie SSH von Haus aus.

Antwort1

Ich bin nicht sicher, ob ich das verstehe, aber hier zähle ich die Anzahl der eindeutigen Zeilen aus der Grep-Ausgabe.

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

Zwei kommen von den Echozeilen und zwei von den Befehlszeilen. Es sollten immer vier sein, oder?

verwandte Informationen