Linux: Como eu executo um script de uma maneira que ele saiba seu diretório?

6

Eu preciso escrever um script, que seria chamado de qualquer lugar, mas precisa ser executado a partir do diretório em que reside. O script deve consultar seu diretório em tempo de execução.

Como isso pode ser alcançado?

Exemplo:

  • script hello.sh reside em /someplace/
  • embora seja chamado de /other/place/ ,
  • o script sabe (durante o tempo de execução) que ele reside em /someplace

EDITAR
Pergunta adicional:
Como é a localização do script, mas com o symlink resolvido?

Exemplo:

  • script hello.sh reside em /someplace/
  • O link simbólico
  • existe em /bin
  • embora o link simbólico seja chamado de /other/place/
  • o script sabe (durante o tempo de execução) que ele reside em /someplace
por linux_is_for_desktop 01.10.2009 / 23:54

3 respostas

5
echo $(dirname $0)

ou

echo ${0%/*}
    
por 02.10.2009 / 00:02
2

Para minha pergunta adicional: Achei que isso funcionasse:

echo $(dirname $(readlink $0))

ou

echo 'dirname \'readlink $0\''

EDIT
Parece que esta resposta veio ao mesmo tempo em que Dennis Williamson comentou sua resposta com a solução;)

    
por 02.10.2009 / 00:20
1

Confira a variável do shell $ _

Do bash manpage:

At shell startup, set to the absolute pathname used to invoke the shell or shell script being executed as passed in the environment or argument list. Subsequently, expands to the last argument to the previous command, after expansion. Also set to the full pathname used to invoke each command executed and placed in the environment exported to that command. When checking mail, this parameter holds the name of the mail file currently being checked.

    
por 24.02.2012 / 16:24