Como armazenar o caminho completo de um diretório a partir de um script bash?

2

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"
    
por Bionix1441 12.10.2018 / 13:16

5 respostas

0

Use realpath :

echo "$(realpath $DIRECTORY)"
    
por 12.10.2018 / 13:23
2

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
$
    
por 12.10.2018 / 13:20
1

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

    
por 12.10.2018 / 14:16
0

Você pode adicionar um teste para um caminho absoluto:

read DIRECTORY
[ "${DIRECTORY:0:1}" = "/" ] || DIRECTORY="$PWD/$DIRECTORY"
echo "$DIRECTORY"
    
por 12.10.2018 / 14:05
-1

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"
    
por 12.10.2018 / 17:50