사용자 경로 파일 url 변수(Ubuntu)

사용자 경로 파일 url 변수(Ubuntu)

그래서 저는 다양한 Linux 장치에서 Minecraft를 플레이하고 장치 간 진행 상황을 동기화하기 위해 .minecraft 폴더 폴더 및 Minecraft의 데이터가 포함된 파일과 함께 제공되는 32GB USB 3.0 플래시 드라이브(약간 과잉인 것으로 알고 있습니다)를 사용합니다. jar 파일을 사용하여 전체 조합을 실행합니다. 이제 Linux에서는 휴대용 마인크래프트가 불가능하므로 appdata를 사용자(파일을 실행 중인)의 홈 폴더에 복사하고 해당 폴더에 sudo 권한을 부여하는 추가 쉘 스크립트 파일을 구현했습니다. cp가 생략되므로 .minecraft로 이름이 변경되었습니다. 숨겨진 파일.

이제 문제는 내 펜 드라이브에서 폴더를 복사하려면 해당 드라이브로 이동해야 한다는 것입니다. 하지만 기다려! 모르는 경우 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는 유효한 사용자 ID를 반환합니다. 이는 sudo와 함께 작동합니다. 즉, sudo 에스컬레이션 명령과 비 에스컬레이션 명령의 차이점을 알고 있습니다.

다음은 내가 전화할 때, sudo로 전화할 때, 루트로 전화할 때 어떻게 응답하는지에 대한 간단한 데모입니다.

[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경로가 사용됩니다 /media/user.

현재 사용자가 필요한 경우 다음을 사용하십시오.

sh this_script.sh `whoami`

sudo필요한 경우 명령 앞에 추가할 수도 있습니다.

관련 정보