Variable de URL del archivo de ruta del usuario (Ubuntu)

Variable de URL del archivo de ruta del usuario (Ubuntu)

Entonces, juego Minecraft en varios dispositivos Linux y, para sincronizar el progreso entre dispositivos, utilicé una unidad flash USB 3.0 de 32 GB (Overkill, lo sé) equipada con una carpeta que contiene los datos de una carpeta .minecraft y un archivo Minecraft.jar. para iniciar todo el combo. Ahora, Minecraft portátil no es tan posible en Linux, así que implementé un archivo de script de shell adicional para copiar los datos de la aplicación a la carpeta de inicio del usuario (el que ejecuta el archivo) y utilicé privilegios sudo para cambiar el nombre de la carpeta a .minecraft desde cp. omite archivos ocultos.

Ahora, la pregunta es, para copiar la carpeta desde mi pendrive, necesito navegar hasta el disco en cuestión. ¡Pero espera! Para aquellos de ustedes que no lo saben, para navegar a una unidad desde cmd, necesitan saber el nombre del usuario. Ahora, solo quiero que toda la experiencia sea perfecta (con esto me refiero a no abrir el script de shell cada vez y editar al usuario), así que necesito saber una manera de sustituir la ruta /media/user/MC por una variable. que navega automáticamente a la unidad en cuestión. Ah, y mientras lo haces, también me gustaría encontrar una manera de copiar los archivos actualizados del juego (después de, digamos, construir algo y guardarlo) de regreso a la unidad flash.

Aquí hay una muestra del código que estaba usando para ejecutar Minecraft al conectar la unidad flash.

#!/bin/sh
sudo rm -rf ~/.minecraft 
sudo cp -rn  /media/pi0/MC/minecraft  ~/
sudo mv /home/pi0/minecraft /home/pi0/.minecraft
java -jar Minecraft.jar

Respuesta1

Si todos los sistemas que está utilizando utilizan BASH (como lo sugiere su declaración hashbang en su script), puede editar su tercera línea para usar la variable de entorno EUID:

sudo cp -rn /media/${EUID}/MC/minecraft ~/

$EUID le devolverá su ID de usuario efectivo. Funciona con sudo, lo que significa que conoce la diferencia entre un comando sudo escalado y un comando no escalado.

Lo siguiente simplemente demuestra cómo responde cuando lo llamo yo, yo con sudo y el root.

[sheepd0g@sys42 ~]$ echo $EUID
17388
[sheepd0g@sys42 ~]$ sudo echo $EUID
17388
[sheepd0g@sys42 ~]$ su -c 'echo $EUID'
0

Respuesta2

No sé si te ayudará, pero puedes reescribir tu código como aquí:

#!/bin/bash -l
#$ -S /bin/bash
#$ -N $1

rm -rf ~/.minecraft
cp -rn  /media/$1/MC/minecraft  ~/
mv /home/$1/minecraft /home/$1/.minecraft
java -jar Minecraft.jar

y puede especificar el usuario en el argumento: sh this_script.sh userusará la ruta /media/user.

Si necesita un usuario actual, utilice:

sh this_script.sh `whoami`

Tal vez puedas agregar sudocomandos anteriores, si lo necesitas.

información relacionada