用户路径文件 url 变量 (Ubuntu)

用户路径文件 url 变量 (Ubuntu)

因此,我在各种 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如果需要的话,也许您可​​以在命令之前添加。

相关内容