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 user
usará path /media/user
.
Se você precisar do usuário atual, use:
sh this_script.sh `whoami`
Talvez você possa adicionar sudo
comandos anteriores, se precisar.