Obtenha o caminho absoluto do arquivo OS X

2

Estou criando um script que solicitará que o usuário insira um local do arquivo e o converterá em um caminho absoluto.

Isso é o que eu tenho até agora. Não tenho certeza de como anexar esses itens juntos.

absolute.sh

read -e -p "Enter a path to a file: " PATH
CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"
echo Absolute path is $CONVERTPATH

Espero que vocês possam ajudar. Agradecemos antecipadamente:)

    
por Ryan Hawdon 09.01.2016 / 12:09

1 resposta

5

Para adicionar , tudo o que você precisa é se livrar das cotações extras, por exemplo, alterar

CONVERTPATH="$(pwd $PATH)" "/" "$(basename $PATH)"

para

CONVERTPATH="$(pwd $PATH)/$(basename $PATH)"

Mas há alguns problemas:

  • pwd não aceita argumentos; você pode usar dirname no caso apresentado.
  • o comando read não configurará PATH ; renomeá-lo, por exemplo, para name
  • o comando echo está incompletamente citado

Com essas correções, você teria isto:

#!/bin/bash
read -e -p "Enter a path to a file: " name
CONVERTPATH="$(dirname $name)/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

Ele não manipula o caso em que alguém responde ao prompt com uma variável. Além disso, o uso pretendido de pwd provavelmente obteria o diretório absoluto. Você pode tentar isso por mais uma substituição

#!/bin/bash
read -e -p "Enter a path to a file: " name
head=$(dirname "$name")
head=$(cd "$head" && pwd)
CONVERTPATH="$head/$(basename $name)"
echo "Absolute path is $CONVERTPATH"

No entanto, ainda não fará o que você quiser . O problema (do seu ponto de vista) é que pwd no OSX simplesmente ecoará o resultado baseado em seguir qualquer link simbólico do comando cd . Esta não é apenas uma peculiaridade do OSX, mas um antigo comportamento do Unix que por exemplo permitiu que você cd em um diretório no qual você não tinha permissão para fazer um pwd apropriado seguindo a cadeia de .. entradas.

Se você quiser um nome de caminho absoluto que não tenha nenhum link simbólico em seu resultado, precisará de uma abordagem diferente. O OSX tem realpath - mas não no linha de comando. Em outros sistemas, você pode usar readlink -f , mas não aqui.

Para discussão geral sobre este tópico:

por 09.01.2016 / 14:01

Tags