Я написал следующий скрипт, который может оказаться полезным, если вы используете Ubuntu на VirtualBox и NetBeans. Скрипты можно использовать и для других нужд VirtualBox, поскольку он пытается:
- Установите приложение (NetBeans).
- Проверяет, запущена ли Ubuntu с гостевыми дополнениями.
- Пытается смонтировать общую папку на основе имени проекта по умолчанию, которое обычно остается неизменным в любой системе (хост-системе или гостевой системе).
- Записывает крепление
rc.local
для удобства использования. - Создает и/или добавляет файл в папку пользователя, чтобы разрешить отключение папки.
Скрипт работает безупречно, если вы не обновитесь. В таком случае будет выполнено несколько монтирований, а скрипт размонтирования не будет работать так, как задумано, поскольку в /etc/mtab
.
Эту проблему нельзя решить с помощью umount
флагов, например , -f -l -a -t
поскольку обычно это может привести к размонтированию всех монтирований. umount -a -t vboxsf
Это /target
также не является желаемым решением, поскольку может не потребоваться размонтирование всех общих папок.
Я придумал решение, но я новичок в bash/скриптинге и не знаю, как его реализовать. Мое решение — проверить rc.local
наличие потенциально дублирующихся строк, чтобы избежать дублирующего монтирования:
#!/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
Есть ли какие-нибудь указания? Моя цель — написать суперскрипты для разработчиков Java, которые загружают самые необходимые инструменты на любой Linux (не только Ubuntu) и монтируют потенциальные вещи, которые не нужно переустанавливать, если у вас есть существующий хост разработки. Такие вещи, как Maven, Tomcat, SVN, JBoss не требуют специальной гостевой установки, если они уже есть на хостовой системе, и есть дополнительные преимущества в объединении разных систем в одну; например, Windows может запускать Photoshop и браузер Safari, но Linux предоставляет лучшую настройку и такие инструменты, как ssh из коробки.
решение1
Я не уверен, правильно ли я понимаю... но здесь я подсчитываю количество уникальных строк из вывода grep.
grep "sudo /sbin/mount.vboxsf" /etc/rc.local | sort | uniq -c | wc -l
Два из линий эха, и два из командных линий. Всегда должно быть четыре, да?