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:
- Installieren Sie eine Anwendung (NetBeans).
- Testet, ob Ubuntu mit Gasterweiterungen läuft.
- Versucht, einen freigegebenen Ordner basierend auf dem Standardprojektnamen bereitzustellen, der normalerweise auf allen Systemen (Host oder Gast) gleich bleibt.
- Schreibt die Halterung auf
rc.local
Benutzerfreundlichkeit. - 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
.
umount
Dies lässt sich nicht durch die Verwendung von Flags wie lösen, -f -l -a -t
da dies normalerweise dazu führen kann, dass alle Mounts demontiert werden. umount -a -t vboxsf
Dies /target
ist 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.local
auf 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?