Pergunta

Existe uma maneira menos bruta de fazer isso?

#!/bin/ksh
THIS_SCRIPT=$(/usr/bin/readlink -f $(echo $0 | /bin/sed "s,^[^/],$PWD/&,"))
echo $THIS_SCRIPT

Estou preso usando ksh mas preferiria uma solução que funcione bash também (o que eu acho que isso faz).

Foi útil?

Solução

Entrada nº 28 Nas perguntas frequentes do Bash:

Como faço para determinar a localização do meu script? Eu quero ler alguns arquivos de configuração do mesmo local.

Há duas razões iniciais pelas quais esse problema surge: você deseja externalizar dados ou configuração do seu script e precisar de uma maneira de encontrar esses recursos externos, ou seu script pretende agir sobre um pacote de algum tipo (por exemplo, uma compilação script) e precisa encontrar os recursos para agir.

É importante perceber que, no caso geral, esse problema não tem solução. Qualquer abordagem que você possa ter ouvido falar e qualquer abordagem que será detalhada abaixo tem falhas e só funcionará em casos específicos. Em primeiro lugar, tente evitar o problema inteiramente por não depender da localização do seu script!

...

Usando Bash_source

A variável Bash_Source Bash é na verdade uma matriz de nomes de caminho. Se você o expandir como uma string simples, por exemplo, "$ bash_source", você receberá o primeiro elemento, que é o nome da função ou script atualmente executando.

Outras dicas

Eu sempre fiz:

SCRIPT_PATH=$(cd `dirname ${0}`; pwd)

Eu nunca usei ReadLink antes: é apenas GNU? (ou seja, funcionará no HP-UX, AIX e Solaris Out of the Box? Dirname e PWD Will ....)

(editado para adicionar `` que eu esqueci no post original. . Primeira chamada Gets Path, a segunda chamada elimina o caminho relativo) (edite 3 erros de digitação fixa que impediam a resposta de linha única, de volta à linha única!)

Por que não pensei em tentar isso antes de fazer a pergunta?

THIS_SCRIPT=$(/usr/bin/readlink -nf "$0")

Funciona bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top