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

1

Então, eu jogo Minecraft em vários dispositivos Linux, e para sincronizar o progresso entre dispositivos, eu usei um USB Flash Drive de 32GB (Overkill, eu sei) equipado com uma pasta contendo os dados de uma pasta .minecraft e um Minecraft arquivo .jar para iniciar o combo inteiro. Agora, o minecraft portátil não é possível no linux, então eu implementei um arquivo de script shell adicional para copiar o appdata para a pasta home do usuário (quem executa o arquivo) e usar 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 para a unidade em questão. Mas espere! Para aqueles de vocês que não sabem, para navegar para uma unidade de cmd, você precisa saber o nome do usuário. Agora, eu só quero que toda a experiência seja perfeita (com isso eu quero dizer não abrir o shell script toda vez e editar o usuário), então eu preciso saber como substituir o caminho / media / user / MC por uma variável que automagicamente navega para a unidade em questão. Ah, e enquanto você está nisso, eu também gostaria de encontrar uma maneira de copiar os arquivos atualizados do jogo (depois vamos dizer construindo algo e salvando-o) de volta para o pen drive.

Aqui está uma amostra 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
    
por Matt Muscat 23.05.2017 / 18:34

2 respostas

2

Se todos os sistemas que você está usando utilizam BASH (como sugerido por sua instrução hashbang no 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. Ele funciona com sudo, o que significa que sabe a diferença entre um comando sudo escalado e um comando não escalonado.

O seguinte simplesmente demonstra 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
    
por 23.05.2017 / 19:17
0

Eu não sei se isso ajuda você, mas você pode reescrever seu código 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á o caminho /media/user .

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

sh this_script.sh 'whoami'

Talvez você possa adicionar sudo antes dos comandos, se precisar.

    
por 23.05.2017 / 19:16