Variável de URL do arquivo do caminho do usuário (Ubuntu)

Variável de URL do arquivo do caminho do usuário (Ubuntu)

Então, eu jogo Minecraft em vários dispositivos Linux e, para sincronizar o progresso entre os dispositivos, usei um pen drive USB 3.0 de 32 GB (Overkill, eu sei) equipado com uma pasta contendo os dados de uma pasta .minecraft e um arquivo Minecraft.jar para lançar o combo inteiro. Agora, o minecraft portátil não é possível no Linux, então implementei um arquivo de script de shell adicional para copiar os dados do aplicativo para a pasta inicial do usuário (aquele que executa o arquivo) e use privilégios sudo para renomear a pasta para .minecraft desde cp omite arquivos ocultos.

Agora a questão é: para copiar a pasta do meu pendrive, preciso navegar até o drive em questão. Mas espere! Para quem não sabe, para navegar até uma unidade a partir do cmd, você precisa saber o nome do usuário. Agora, eu só quero que toda a experiência seja perfeita (com isso quero dizer não abrir o script de shell todas as vezes e editar o usuário), então preciso saber uma maneira de substituir o caminho /media/user/MC por uma variável que navega automaticamente para a unidade em questão. Ah, e já que você está nisso, também gostaria de encontrar uma maneira de copiar os arquivos atualizados do jogo (depois de, digamos, construir algo e salvá-lo) de volta para a unidade flash.

Aqui está um exemplo do código que eu estava usando para executar o Minecraft ao conectar a unidade 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

Responder1

Se todos os sistemas que você está usando utilizam BASH (conforme sugerido pela instrução hashbang em seu script), você pode editar sua terceira linha para usar a variável de ambiente EUID:

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

$EUID retornará seu ID de usuário efetivo. Funciona com sudo, o que significa que sabe a diferença entre um comando sudo escalonado e um comando não escalonado.

O seguinte demonstra simplesmente como ele responde quando chamado por mim, por mim com sudo e por root

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

Responder2

Não sei se isso ajuda você, mas você pode reescrever seu código como aqui:

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

e você pode especificar o usuário no argumento: sh this_script.sh userusará path /media/user.

Se você precisar do usuário atual, use:

sh this_script.sh `whoami`

Talvez você possa adicionar sudocomandos anteriores, se precisar.

informação relacionada