在这个脚本中,~ 是 /root/。如何进入 /home/name-of-the-user/?

在这个脚本中,~ 是 /root/。如何进入 /home/name-of-the-user/?
#!/bin/bash    

#become root
UID=$(id -u)
if [ x$UID != x0 ] 
then
    printf -v cmd_str '%q ' "$0" "$@"
    exec sudo su -c "$cmd_str"
fi


mkdir ~/.D3GO/; 
cp -a `pwd`/viewright_backup/. ~/.D3GO/;

mkdir /opt/D3GO/;
cp `pwd`/D3GO /opt/D3GO/;
cp `pwd`/D3GO.png /opt/D3GO/;
cp `pwd`/D3GO.desktop /usr/share/applications/;
chmod +x /opt/D3GO/D3GO;

如您所见,由于此脚本使用了 ~,并且脚本以 root 身份运行,因此它会在 /root/ 目录中创建文件夹 .D3GO。是否可以在主目录中创建它。例如,如果脚本位于 /home/user/Downloads/,则应在 home/user/ 中创建目录。如果它位于 /home/user2/Downloads/dir/,则应在 /home/user2/ 中创建它,等等。这可能吗?谢谢!

也许是这样的:

#!/bin/bash    

#remember the username
user = $(whoami);

#become root
UID=$(id -u)
if [ x$UID != x0 ] 
then
    printf -v cmd_str '%q ' "$0" "$@"
    exec sudo su -c "$cmd_str"
fi


mkdir /home/`echo user`/.D3GO/; 
cp -a `pwd`/viewright_backup/. /home/`echo user`/.D3GO/;

答案1

你让事情变得比本来的更困难了。

首先,您的脚本(如发布的)没有理由需要以 root 身份运行。

其次,您使用的是 /opt 而不是 /usr/local 。默认情况下,ubuntu 使用 /usr/local ,而 /usr/local 位于默认路径上。

第三,您使用了模糊的位置,例如 .. 和 pwd 和 ~ 。最好使用完整路径和标准位置。

为什么不使用 $HOME ?

[[ -d “$HOME”/.D3GO ]] || mkdir “$HOME”/.D3GO

您的大多数其他问题都可以通过一个合适的 make 文件或一个打包好的 .deb 来解决。如果您的脚本依赖于脚本、文件或 .png 之外的内容,请将其打包成 .deb 或编写一个 make 文件,以便将您需要的内容安装到标准位置 /usr/local 或系统中(如果您愿意)。

如果您正在安装某些东西,您需要提供一个档案,并且您应该根据您提供的档案编写脚本。

因此你的档案可能是 FOO,里面会有

FOO/文件 FOO/图片 FOO/你的脚本

因此“Your_Script”可以直接调用“cp ./file/file_to_install /where/to/install”

老实说,大多数安装(“cp pwd” 东西)最好使用以下方式处理

  1. 正确打包成 .deb 文件

  2. 一个 make 文件。

以上任何一种方式都有许多优点,包括但不限于易于安装、易于拆卸以及将文件安装到标准、已知位置。

相关内容