![用户路径文件 url 变量 (Ubuntu)](https://linux22.com/image/112031/%E7%94%A8%E6%88%B7%E8%B7%AF%E5%BE%84%E6%96%87%E4%BB%B6%20url%20%E5%8F%98%E9%87%8F%20(Ubuntu).png)
因此,我在各种 Linux 设备上玩 Minecraft,为了在设备之间同步进度,我使用了 32GB USB 3.0 闪存驱动器(我知道,有点过头了),该驱动器配备了一个包含 .minecraft 文件夹中的数据的文件夹和一个 Minecraft.jar 文件启动整个组合。现在,便携式的minecraft在Linux上是不可能的,所以我实现了一个额外的shell脚本文件来将appdata复制到用户(运行该文件的人)的主文件夹中,并使用sudo权限将该文件夹重命名为.minecraft,因为cp省略隐藏文件。
现在的问题是,要从我的随身碟复制文件夹,我需要导航到有问题的驱动器。可是等等!对于那些不知道的人来说,要从 cmd 导航到驱动器,您需要知道用户名。现在,我只希望整个体验是无缝的(我的意思是不要每次都打开 shell 脚本并编辑用户),所以我需要知道一种可以用 /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 调用和 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
如果需要的话,也许您可以在命令之前添加。