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

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

그래서 저는 다양한 Linux 장치에서 Minecraft를 플레이하고 장치 간 진행 상황을 동기화하기 위해 .minecraft 폴더의 데이터가 포함된 폴더와 Minecraft.jar 파일이 장착된 32GB USB 3.0 플래시 드라이브(Overkill이라고 알고 있습니다)를 사용했습니다. 전체 콤보를 시작합니다. 이제 휴대용 마인크래프트는 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

인수에 user를 지정할 수 있습니다. sh this_script.sh userpath 를 사용합니다 /media/user.

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

sh this_script.sh `whoami`

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

관련 정보