Eu tenho essas variáveis no meu script:
TARGET=username
TARGET_DIR="~${TARGET}/.ssh"
Eu quero que o TARGET_DIR
var mantenha este caminho: /home/username/.ssh
mas para usar ~
em vez de /home/
. Mas quando executo o script e tento criar um novo .ssh
diretório com o nome de usuário, ele me diz:
mkdir: cannot create directory ‘~username/.ssh’: No such file or directory
Mesmo que os diretórios /home/username existam. Se eu fizer: TARGET_DIR="/home/${TARGET}/.ssh"
funciona. Como posso usar o ~
sinal na variável?
Em
bash
,ash
,mksh
eyash
a expansão do til ocorre antes da expansão do parâmetro, então isso não pode funcionar.Você pode usar
ksh93
ouzsh
aqui, ou recorrer aeval
:Se o seu sistema tiver um
getent
comando (bastante comum hoje em dia), você também pode usar:Ou use
perl
:O que também funcionaria com usuários com caracteres incomuns em seu nome de usuário (como o espaço com o qual zsh,
~$user
mas nãoksh93
's~"$user"
, também teria problemas).