[APORTE] [Bash] (Linux) VMWare: Montar / Desmontar 'Shared Folders'
(1/1)
Eleкtro:
Los siguientes dos scripts, desarrollados en el lenguaje Bash, y que se deben usar bajo un sistema operativo Linux en una máquina virtual de VMWare (aunque se pueden modificar para Virtual Box), sirven como atajo para montar y desmontar las "carpetas compartidas" (shared folders) de forma sencilla.
Utilizar estos scripts nos ahorra un valioso tiempo al no tener que usar comandos específicos en la distro de Linux para llevar a cabo el montaje de las carpetas compartidas de VMWare y de forma repetitiva (ya que el montaje no es persistente).
La idea tras esta simple herramienta es eso, ahorrar tiempo, y de esta manera, mediante el script de desmontaje, poder aislar la máquina virtual del sistema operativo anfitrión impidiendo el acceso a las carpetas compartidas, y volver a habilitar el acceso, tan solo haciendo dos clicks para ejecutar estos scripts.
Estos scripts son un equivalente de estos otros para Windows:
— Tema: [APORTE] [VBS] VMWare: Mount / Unmount Shared Folders Network Drive
Sin embargo, en esta ocasión estos scripts que comparto están programados en el idioma español, e incluyen emojis. Para ser honestos yo no tengo experiencia con Bash, así que básicamente lo ha hecho casi todo ChatGPT, yo solo le di unas pinceladas.
Mount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash
# Carpeta a montar: VMWare Shared Folders (".host:/" = todas las carpetas)
# Destino: "/mnt/shared_folders"
MOUNT_SOURCE=".host:/"
MOUNT_DESTINATION="/mnt/shared_folders"
# =========================================
# Montar las carpetas compartidas de VMWare
# =========================================
# Crear /mnt/shared_folders si no existe
if [ ! -d "$MOUNT_DESTINATION" ]; then
echo "📂 Creando carpeta $MOUNT_DESTINATION... 🔥"
sudo mkdir -p "$MOUNT_DESTINATION"
fi
# Verificar si ya está montado en /mnt/shared_folders
if mountpoint -q "$MOUNT_DESTINATION"; then
echo "⚠️ $MOUNT_DESTINATION ya está montado."
else
echo "🔗 Montando carpeta compartida VMWare en $MOUNT_DESTINATION..."
sudo vmhgfs-fuse "$MOUNT_SOURCE" "$MOUNT_DESTINATION" -o allow_other
if [ $? -ne 0 ]; then
echo "❌ Error montando la carpeta compartida. Abortando... 💔"
exit 1
fi
echo "✅ Montaje exitoso de carpeta compartida VMWare en $MOUNT_DESTINATION."
fi
# ====================================================================
# Crear enlace simbólico de las carpetas compartidas, en el escritorio
# ====================================================================
# Detectar ruta del escritorio usando user-dirs.dirs (XDG estándar)
DESKTOP_DIR=""
# Leer archivo de configuración XDG si existe
if [ -f "$HOME/.config/user-dirs.dirs" ]; then
DESKTOP_DIR=$(grep XDG_DESKTOP_DIR "$HOME/.config/user-dirs.dirs" | cut -d= -f2 | tr -d \")
fi
# Si no lo encontró o está vacío, probar las carpetas comunes
if [ -z "$DESKTOP_DIR" ]; then
if [ -d "$HOME/Desktop" ]; then
DESKTOP_DIR="$HOME/Desktop"
elif [ -d "$HOME/Escritorio" ]; then
DESKTOP_DIR="$HOME/Escritorio"
else
echo "⚠️ No se pudo detectar la ubicación de la carpeta Desktop / Escritorio. Abortando... 😢"
exit 1
fi
else
# Eliminar $HOME si está en la ruta para expandirla bien
DESKTOP_DIR="${DESKTOP_DIR/#\$HOME/$HOME}"
fi
# Definir origen y destino
LINK_DESTINATION="$DESKTOP_DIR/VMWare Shared Folders"
# Crear enlace simbólico solo si no existe ya.
if [ -L "$LINK_DESTINATION" ] || [ -e "$LINK_DESTINATION" ]; then
echo "⚠️ El enlace o archivo '$LINK_DESTINATION' ya existe. No se creará un nuevo enlace."
else
ln -s "$MOUNT_DESTINATION" "$LINK_DESTINATION"
echo "✅ Enlace simbólico creado en: $LINK_DESTINATION 🎉"
fi
echo -e "\n🏁 Operación finalizada."
Dismount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash
# Ruta de montaje de las carpetas compartidas de VMware
MOUNT_DESTINATION="/mnt/shared_folders"
echo "🔍 Verificando si está montado $MOUNT_DESTINATION..."
if mountpoint -q "$MOUNT_DESTINATION"; then
echo "📤 Desmontando carpeta compartida de VMware de: $MOUNT_DESTINATION..."
sudo umount "$MOUNT_DESTINATION"
if [ $? -eq 0 ]; then
echo "✅ Carpeta compartida desmontada correctamente. 🎉"
else
echo "❌ Error al desmontar $MOUNT_DESTINATION. ¿Está en uso? 💔"
exit 1
fi
else
echo "⚠️ $MOUNT_DESTINATION no está montado actualmente."
if [ -d "$MOUNT_DESTINATION" ]; then
echo "ℹ️ La carpeta existe, pero no contiene un punto de montaje activo."
else
echo "🚫 La carpeta $MOUNT_DESTINATION no existe."
fi
fi
echo -e "\n🏁 Operación finalizada."
PD: parece que SMF no se lleva bien con los emojis, pierden el formato al usar la etiqueta "Bash" en el bloque de código.
Eleкtro:
No puedo editar el post principal, así que... aquí les dejo los mismos scripts, con ligeras mejoras y en inglés:
Mount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash
###############################################################################
# CONFIGURATION #
###############################################################################
# Folder to mount: VMWare Shared Folders (".host:/" = all folders)
MOUNT_SOURCE=".host:/"
MOUNT_DESTINATION="/mnt/shared_folders"
###############################################################################
# MAIN SCRIPT EXECUTION #
###############################################################################
# =========================================
# Mount VMWare shared folders
# =========================================
# Create /mnt/shared_folders if it doesn't exist
if [ ! -d "$MOUNT_DESTINATION" ]; then
echo "📂 Creating folder $MOUNT_DESTINATION..."
sudo mkdir -p "$MOUNT_DESTINATION"
fi
# Check if already mounted at /mnt/shared_folders
if mountpoint -q "$MOUNT_DESTINATION"; then
echo "🚫 $MOUNT_DESTINATION is already mounted."
else
echo "🔗 Mounting VMWare shared folder at $MOUNT_DESTINATION..."
sudo vmhgfs-fuse "$MOUNT_SOURCE" "$MOUNT_DESTINATION" -o allow_other
if [ $? -ne 0 ]; then
echo "❌ Error mounting shared folder. Aborting..."
exit 1
fi
echo "✅ Successfully mounted VMWare shared folder at $MOUNT_DESTINATION."
fi
# ====================================================================
# Create symbolic link to the shared folders on the Desktop
# ====================================================================
# Detect desktop path using user-dirs.dirs (XDG standard)
DESKTOP_DIR="$(xdg-user-dir DESKTOP)"
# Define source and destination for the link
LINK_DESTINATION="$DESKTOP_DIR/VMWare Shared Folders"
# Create symbolic link only if it doesn't already exist
if [ -L "$LINK_DESTINATION" ] || [ -e "$LINK_DESTINATION" ]; then
echo "🚫 The link or file '$LINK_DESTINATION' already exists. No new link will be created."
else
ln -s "$MOUNT_DESTINATION" "$LINK_DESTINATION"
echo "✅ Symbolic link created at: $LINK_DESTINATION"
fi
echo -e "\n🏁 Operation completed."
echo
read -n1 -r -s -p "Press any key to finish..."
echo
Dismount_VMWare_Shared_Folders.sh
Código:
#!/bin/bash
###############################################################################
# CONFIGURATION #
###############################################################################
# Mount path for VMware shared folders
MOUNT_DESTINATION="/mnt/shared_folders"
###############################################################################
# MAIN SCRIPT EXECUTION #
###############################################################################
echo "🔍 Checking if $MOUNT_DESTINATION is mounted..."
if mountpoint -q "$MOUNT_DESTINATION"; then
echo "📤 Dismounting VMware shared folder from: $MOUNT_DESTINATION..."
sudo umount "$MOUNT_DESTINATION"
if [ $? -eq 0 ]; then
echo "✅ Shared folder successfully unmounted."
else
echo "❌ Error unmounting $MOUNT_DESTINATION. Is it in use?"
exit 1
fi
else
echo "⚠️ $MOUNT_DESTINATION is not currently mounted."
if [ -d "$MOUNT_DESTINATION" ]; then
echo "ℹ️ The folder exists but does not have an active mount point."
else
echo "🚫 The folder $MOUNT_DESTINATION does not exist."
fi
fi
echo -e "\n🏁 Operation completed."
echo
read -n1 -r -s -p "Press any key to finish..."
echo
Navegación