だから私は、さまざまなLinuxデバイスでMinecraftをプレイし、デバイス間の進行状況を同期させるために、.minecraftフォルダフォルダとMinecraftのデータを含むファイルに付属の32GB USB 3.0フラッシュドライブ(少し過剰であることがわかっています)を使用します。 jarファイルを使用して完全な組み合わせを実行します。 LinuxではポータブルMinecraftが不可能なので、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環境変数を使用するように3行目を編集できます。
sudo cp -rn /media/${EUID}/MC/minecraft ~/
$EUID は有効なユーザー ID を返します。これは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
パスが使用されます/media/user
。
現在のユーザーが必要な場合は、次を使用します。
sh this_script.sh `whoami`
sudo
必要に応じてコマンドの前に追加することもできます。