Use realpath :
echo "$(realpath $DIRECTORY)"
Eu quero obter o diretor de caminho completo de um script, mesmo que o usuário insira o './' ou '/ ~'
#!/bin/bash
echo "Enter the directory"
read DIRECTORY #how to store the full-path instead of something like ./
echo "$DIRECTORY"
Use realpath :
echo "$(realpath $DIRECTORY)"
Para um diretório, você pode usar o comando pwd
ou a variável $PWD
.
Exemplo
$ DIRECTORY=.
$ TRUEDIR=$(cd -- "$DIRECTORY" && pwd)
$ echo $TRUEDIR
/home/steve
$
Um caminho absoluto começa com /
, um relativo não. Você pode transformar um caminho relativo em um caminho absoluto, adicionando o caminho ao diretório atual e uma barra antes do caminho relativo.
case $DIRECTORY in
/*) DIRECTORY="$PWD/$DIRECTORY";;
esac
Este é um código portátil: funciona em sh simples, não apenas em bash.
O caminho resultante pode conter links simbólicos. Isso é quase sempre a coisa certa, mas se você quiser canonizar os links simbólicos, consulte Convertendo caminho relativo para caminho absoluto sem link simbólico
Você pode adicionar um teste para um caminho absoluto:
read DIRECTORY
[ "${DIRECTORY:0:1}" = "/" ] || DIRECTORY="$PWD/$DIRECTORY"
echo "$DIRECTORY"
realpath (a resposta aceita) está obsoleto e não está disponível na maioria das instalações. Eu usaria seu substituto:
readlink -f "$DIRECTORY"
Também lida com ~ e ./ e seguirá links simbólicos.
Se você quiser permitir que o usuário insira um $ DIRECTORY que não existe, use:
readlink -m "$DIRECTORY"