Link simbólico e perguntas de link físico

4

Digamos que /A/B/c.sh tenha um link simbólico para /X/Y/c.sh.

  • Se c.sh tiver o comando "./SOMETHING", '.' significa / A / B / ou / X / Y /?
  • Como sobre o link físico?
por prosseek 08.09.2010 / 16:14

4 respostas

10

. é, na verdade, o diretório de trabalho atual em ambos os casos; não tem nada a ver com o diretório que contém o script:

[/tmp] $ echo "realpath ." > test.sh && chmod +x test.sh
[/tmp] $ /tmp/test.sh
/tmp
[/tmp] $ cd /usr/bin
[/usr/bin] $ /tmp/test.sh
/usr/bin
    
por 08.09.2010 / 16:31
3

Concordo com Michael, mas um lugar onde isso pode ser importante é o parâmetro $0 .

Eu vi scripts que investigam o nome de $0 e fazem coisas diferentes com base no nome simbólico usado.

    
por 08.09.2010 / 17:04
3

O . neste caso significa que a corrente está trabalhando diretamente; os caminhos dos links são irrelevantes. Referenciar o arquivo para execução ou edição é essencialmente o mesmo, independentemente do tipo de link, mesmo que existam vários diferenças entre eles.

    
por 08.09.2010 / 17:09
2

Embora isso não seja o que você perguntou, pode ser o que você está procurando ...

Você pode usar "$0" como uma maneira de localizar sub-scripts que estão localizados no mesmo diretório que o script principal.

MYPATH="$(realpath "$0")"
MYDIR="$(dirname "$MYPATH")"
"$MYDIR/otherscript" ...

Como o script principal é um link simbólico, é necessário excluir a referência $0 , usando realpath . Embora dirname retorne . se seu arg não tiver uma parte de diretório, neste exemplo realpath já terá transformado o argumento em um caminho absoluto.

    
por 11.09.2010 / 00:48