#!/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” 东西)最好使用以下方式处理
正确打包成 .deb 文件
一个 make 文件。
以上任何一种方式都有许多优点,包括但不限于易于安装、易于拆卸以及将文件安装到标准、已知位置。