Benutzerpfad-Datei-URL-Variable (Ubuntu)

Benutzerpfad-Datei-URL-Variable (Ubuntu)

Ich spiele Minecraft also auf verschiedenen Linux-Geräten und um den Fortschritt zwischen den Geräten zu synchronisieren, habe ich einen 32 GB großen USB 3.0-Flash-Speicher (Overkill, ich weiß) verwendet, der mit einem Ordner ausgestattet ist, der die Daten aus einem .minecraft-Ordner enthält, und einer Minecraft.jar-Datei, um die gesamte Kombination zu starten. Nun ist portables Minecraft unter Linux nicht wirklich möglich, also habe ich eine zusätzliche Shell-Skriptdatei implementiert, um die Anwendungsdaten in den Home-Ordner des Benutzers (der die Datei ausführt) zu kopieren und den Ordner mit Sudo-Berechtigungen in .minecraft umzubenennen, da cp versteckte Dateien auslässt.

Nun lautet die Frage: Um den Ordner von meinem USB-Stick zu kopieren, muss ich zu dem betreffenden Laufwerk navigieren. Aber warten Sie! Für diejenigen unter Ihnen, die es nicht wissen: Um von cmd aus zu einem Laufwerk zu navigieren, müssen Sie den Benutzernamen kennen. Nun, ich möchte nur, dass das gesamte Erlebnis nahtlos ist (damit meine ich, dass ich nicht jedes Mal das Shell-Skript öffnen und den Benutzer bearbeiten muss), also muss ich wissen, wie ich den Pfad /media/user/MC durch eine Variable ersetzen kann, die automatisch zu dem betreffenden Laufwerk navigiert. Oh, und wenn Sie schon dabei sind, würde ich auch gerne einen Weg finden, die aktualisierten Spieldateien (nachdem ich beispielsweise etwas erstellt und gespeichert habe) zurück auf den Flash-Speicher zu kopieren.

Hier ist ein Beispiel des Codes, den ich verwendet habe, um Minecraft beim Einstecken des Flash-Laufwerks auszuführen.

#!/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

Antwort1

Wenn alle von Ihnen genutzten Systeme BASH verwenden (wie in der Hashbang-Anweisung Ihres Skripts vorgeschlagen), können Sie Ihre dritte Zeile bearbeiten, um die Umgebungsvariable EUID zu verwenden:

sudo cp -rn /media/${EUID}/MC/minecraft ~/

$EUID gibt Ihre effektive Benutzer-ID zurück. Es funktioniert mit sudo, was bedeutet, dass es den Unterschied zwischen einem sudo-eskalierten und einem nicht eskalierten Befehl kennt.

Das Folgende zeigt einfach, wie es reagiert, wenn es von mir aufgerufen wird, von mir mit sudo und von root

[sheepd0g@sys42 ~]$ echo $EUID
17388
[sheepd0g@sys42 ~]$ sudo echo $EUID
17388
[sheepd0g@sys42 ~]$ su -c 'echo $EUID'
0

Antwort2

Ich weiß nicht, ob es Ihnen hilft, aber Sie können Ihren Code wie folgt umschreiben:

#!/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

und Sie können im Argument den Benutzer angeben: sh this_script.sh useres wird der Pfad verwendet /media/user.

Wenn Sie den aktuellen Benutzer benötigen, verwenden Sie:

sh this_script.sh `whoami`

Vielleicht können Sie sudobei Bedarf vorherige Befehle hinzufügen.

verwandte Informationen