Путь пользователя Переменная URL файла (Ubuntu)

Путь пользователя Переменная URL файла (Ubuntu)

Итак, я играю в 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предварительные команды, если вам это необходимо.

Связанный контент