そこで、私はさまざまな Linux デバイスで Minecraft をプレイし、デバイス間で進行状況を同期するために、.minecraft フォルダーのデータを含むフォルダーと、コンボ全体を起動するための Minecraft.jar ファイルを備えた 32 GB USB 3.0 フラッシュ ドライブ (やりすぎだとはわかっています) を使用しました。現在、Linux ではポータブル Minecraft は不可能なので、追加のシェル スクリプト ファイルを実装して、appdata をユーザー (ファイルを実行するユーザー) のホーム フォルダーにコピーし、cp は隠しファイルを省略するため、sudo 権限を使用してフォルダーの名前を .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 を利用している場合 (スクリプト内のハッシュバン ステートメントで示唆されているように)、3 行目を編集して EUID 環境変数を使用できます。
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
引数に user を指定すると、sh this_script.sh user
パスが使用されます/media/user
。
現在のユーザーが必要な場合は、以下を使用します。
sh this_script.sh `whoami`
sudo
必要であれば、before コマンドを追加することもできます。