Como substituir meu nome de usuário em um script pela variável

9

Quero criar um script de instalação para o meu PC doméstico e quero torná-lo mais flexível.

Como substituir meu nome de usuário pela variável de usuário atual?

Exemplo: faça o download para: / home / THISUSER / Downloads /

FixXxeR
fonte
2
Você pode usar a variável $HOMEpara a casa, e $USERpara o usuário :)
dadexix86
2
@ dadexix86 você também pode postar uma resposta. Esta questão é muito barata para perder tempo nos comentários #
Sergiy Kolodyazhnyy 4/16
@Serg sim, mas tenho quase certeza de que é uma duplicata, e eu estou procurando o original :)
dadexix86
Observe que a pasta Downloads existe apenas em sistemas em inglês. Eles podem ser renomeados se o usuário escolher uma localização diferente.
Byte Commander
o download foi apenas por exemplo. Os arquivos serão excluídos após a instalação. Mas obrigado pela informação útil
FixXxeR 4/16/16

Respostas:

21

Você pode usar a variável $HOMEpara a casa e $USERpara o usuário.

Seu exemplo pode ser $HOME/Downloadsou /home/$USER/Downloads.

dadexix86
fonte
10
Nem todos os sistemas usam / home para diretórios pessoais, portanto, a melhor prática é usar $ HOME se você estiver fazendo referência ao diretório pessoal.
asmeurer
3
@asmeurer, lidamos apenas com o Ubuntu e derivados oficiais. Qual versão padrão não usa / home?
Rinzwind
4
Só porque este site é apenas sobre Ubuntu, não significa que você deve evitar escrever código portátil e usar as melhores práticas.
precisa saber é
15

Se você quiser fazer isso, use ...

more ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
# 
XDG_DESKTOP_DIR="/discworld/Desktop"
XDG_DOWNLOAD_DIR="/discworld/Downloads"
XDG_TEMPLATES_DIR="/discworld/Templates"
XDG_PUBLICSHARE_DIR="/discworld/Public"
XDG_DOCUMENTS_DIR="/discworld/Documents"
XDG_MUSIC_DIR="/discworld/Music"
XDG_PICTURES_DIR="/discworld/Pictures"
XDG_VIDEOS_DIR="/discworld/Videos"

então isso seria

echo $(xdg-user-dir DOWNLOAD)

e mostrará o local de download padrão (no meu caso /discworld/Downloads). Funciona para todas essas palavras. Gostar ...

echo $(xdg-user-dir DESKTOP)
Rinzwind
fonte
Esta é a verdadeira maneira universal, sempre funciona :)
Jacob Vlijm
Apenas xdg-user-dir DOWNLOADse você quiser imprimi-lo. : P
kos
O que morefaz quando !isatty(stdin)?
cat
@JacobVlijm Existem sistemas em que o xdg-user-dirs não está instalado. Provavelmente menos no Ubuntu, mas é definitivamente menos universal do que usar $ HOME e $ USER.
jazzpi
@jazzpi Como estamos no Ask Ubuntu , os diretórios do usuário acima dentro do escopo da pergunta são universais, enquanto o `$ HOME / Downloads` definitivamente não é.
precisa saber é o seguinte