Não funciona porque ~
é citado. Aspas duplas "
suppress expansão de til . Não há diretório com o nome literal ~/bin
. Como explicado em man bash
(grifo meu):
Expansão de til
Se uma palavra começar com um caractere de til sem aspas ('~'), todas as
caracteres que precedem a primeira barra não destacada (ou todos os caracteres, se
não há nenhuma barra sem destaque) são considerados um prefixo de til. Se nenhum dos
os caracteres no prefixo-til são citados, os caracteres no
O prefixo til seguido do til é tratado como um possível nome de login.
Se este nome de login for a string nula, o til é substituído pelo
valor do parâmetro do shell HOME. Se HOME não estiver definida, o diretório inicial do usuário que está executando o shell será substituído. Caso contrário, o prefixo-til é substituído pelo diretório inicial associado
com o nome de login especificado.
Você pode remover as aspas , pois ~
é o único caractere no caminho ~/bin
que fará com que o shell execute uma expansão e queremos a expansão neste caso. O shell não executará nenhuma outra expansão no resultado da expansão do til, pelo menos no Bash 4 , que todos os lançamentos atuais ou remotamente recentes do Ubuntu têm . Portanto, mesmo que o seu diretório inicial contenha caracteres incomuns, como espaços, tudo bem.
Ou você pode usar $HOME
de ~
, porque não é suprimida por aspas duplas, apenas por aspas simples . As aspas duplas do garantem que o valor expandido não esteja sujeito a quaisquer outras expansões, portanto divisão de palavras ou expansão de nome de arquivo não ocorre. Portanto, $HOME
funciona mesmo com diretórios pessoais com nomes estranhos, desde que você mantenha as aspas duplas.