Итак, я играю в Minecraft на различных устройствах Linux, и для синхронизации прогресса между устройствами я использовал флэш-накопитель USB 3.0 на 32 ГБ (Overkill, я знаю), оснащенный папкой, содержащей данные из папки .minecraft, и файлом Minecraft.jar для запуска всей комбинации. Теперь, портативный Minecraft не так возможен на Linux, поэтому я реализовал дополнительный файл скрипта оболочки, чтобы скопировать appdata в домашнюю папку пользователя (того, кто запускает файл) и использовал привилегии sudo, чтобы переименовать папку в .minecraft, поскольку cp пропускает скрытые файлы.
Теперь вопрос в том, чтобы скопировать папку с моего флеш-накопителя, мне нужно перейти на нужный диск. Но подождите! Для тех из вас, кто не знает, чтобы перейти на диск из cmd, вам нужно знать имя пользователя. Теперь я просто хочу, чтобы весь процесс был бесшовным (под этим я подразумеваю не открывать скрипт оболочки каждый раз и не редактировать пользователя), поэтому мне нужно знать, как я могу заменить путь /media/user/MC на переменную, которая автоматически перейдет на нужный диск. О, и пока вы этим занимаетесь, я также хотел бы найти способ скопировать обновленные файлы игры (после, скажем, сборки чего-то и сохранения) обратно на флеш-накопитель.
Вот пример кода, который я использовал для запуска Minecraft при подключении флеш-накопителя.
#!/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
решение1
Если все используемые вами системы используют BASH (как предполагает оператор hashbang в вашем скрипте), вы можете отредактировать третью строку, чтобы использовать переменную среды EUID:
sudo cp -rn /media/${EUID}/MC/minecraft ~/
$EUID вернет ваш эффективный идентификатор пользователя. Он работает с sudo, что означает, что он знает разницу между эскалированной командой sudo и неэскалированной командой.
Ниже просто показано, как он реагирует, когда его вызываю я, я с sudo и пользователь root.
[sheepd0g@sys42 ~]$ echo $EUID
17388
[sheepd0g@sys42 ~]$ sudo echo $EUID
17388
[sheepd0g@sys42 ~]$ su -c 'echo $EUID'
0
решение2
Не знаю, поможет ли это вам, но вы можете переписать свой код следующим образом:
#!/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
и вы можете указать пользователя в аргументе: sh this_script.sh user
будет использоваться path /media/user
.
Если вам нужен текущий пользователь, используйте:
sh this_script.sh `whoami`
Возможно, вы можете добавить sudo
предварительные команды, если вам это необходимо.