#!/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 /目录中创建folder.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/`$user`/.D3GO/;
cp -a `pwd`/viewright_backup/. /home/`$user`/.D3GO/;
答案 0 :(得分:1)
if [ "$UID" != 0 ]
then
printf -v set_home_prefix 'HOME=%q; ' "$HOME"
printf -v cmd_str '%q ' "$0" "$@"
exec sudo su -c "$set_home_prefix $cmd_str"
fi
我冒昧地纠正了你在另一个问题上接受的答案中给出的无效引用。
答案 1 :(得分:0)
按字面意思回答你的问题:
sudo -E
保留环境变量(尽管新shell可能会覆盖某些变量)。
export MY_HOME=$HOME
. . .
exec sudo -E su -c "$cmd_str"
然后,您可以在脚本中引用$MY_HOME
,并将其设置为原始用户$HOME
。
但我同意@CharlesDuffy的评论,你需要sudo
来运行你需要的各个命令。如果这样做,那么sudo
命令的参数将从原始shell中替换。
例如:
sudo cp -a `pwd`/viewright_backup/. $HOME/.D3GO/;
这使用非root用户$HOME
,因为变量替换发生在sudo
命令执行之前。