Neste script, ~ é / root /. Como estar em / home / nome-do-usuário /?

0
#!/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;

Como você pode ver, porque isso usa ~, e o script é executado como root, ele cria a pasta.D3GO no diretório / root /. É possível criá-lo no diretório inicial. Por exemplo, se o script estiver localizado em / home / user / Downloads /, ele deverá criar o diretório em home / user /. Se estiver localizado em / home / user2 / Downloads / dir /, deverá criá-lo em / home / user2 / etc. Isso é possível? Obrigado!

Talvez algo como:

#!/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/;
    
por Dusan Milosevic 08.07.2014 / 22:55

1 resposta

1

Você está tornando isso mais difícil do que precisa ser.

Primeiro, não há motivo para que seu script (como postado) precise ser executado como root.

Em segundo lugar, você está usando / opt em vez de / usr / local. Por padrão, o ubuntu usa / usr / local e / usr / local está no caminho padrão.

E em terceiro lugar, você está usando locais ambíguos, como ..e pwd e ~. É melhor usar o caminho completo e os locais padrão.

Por que não usar o $ HOME?

[[-d "$ HOME" /. D3GO]] || mkdir "$ HOME" /. D3GO

A maioria dos seus outros problemas são resolvidos com um arquivo de criação decente ou um .deb bem empacotado. Se o seu script depende de coisas fora do script, arquivos ou .png, empacote-o em um .deb ou escreva um arquivo de criação para que as coisas que você precisa sejam instaladas em locais padrão / usr / local ou no sistema, se desejar.

Se você estiver instalando algo, deverá fornecer um arquivo e deverá escrever seu script em relação ao arquivo que você fornece.

Assim, o seu arquivo pode ser FOO e dentro você teria

FOO / arquivos FOO / img FOO / Your_script

Então "Your_Script" pode apenas chamar "cp ./file/file_to_install / where / to / install"

Para ser honesto, a maior parte de sua instalação (coisas "cp pwd") é melhor tratada com

  1. Embalagem correta em um .deb

  2. Um arquivo de criação.

Qualquer uma das opções acima possui inúmeras vantagens, incluindo, entre outras, facilidade de instalação, facilidade de remoção e instalação de arquivos em locais padrão e conhecidos.

    
por Panther 08.07.2014 / 23:16