Como especificar o local atual do arquivo em lote (.command) no Mac OS X

2

Eu tenho um arquivo em lotes (.command) que eu clico duas vezes para fazer o trabalho. Ele tem dependências em arquivos na mesma pasta, mas se eu clicar duas vezes no arquivo .command, ele apenas inicia e assume que a localização atual é / ~

Como faço para encontrar / especificar a localização do arquivo .command no próprio script, para que eu possa fazer referência a ativos relativos?

    
por ConfusedNoob 09.11.2012 / 05:51

1 resposta

3

Se você estiver usando o bash (ou seja, o script começa com #!/bin/bash ), você pode usar $ BASH_SOURCE para obter o nome do arquivo do script. A partir disso, você pode obter o diretório em:

mydir="$(dirname "$BASH_SOURCE")"

... e depois usá-lo para encontrar arquivos relativos ao script, por exemplo cp "$mydir/fileInTheSameFolder" /tmp (e por favor use sempre aspas duplas em volta, como fiz aqui).

Observe que isso pode ser um caminho relativo; por exemplo, se o script foi executado a partir de um shell interativo com ./scriptname.command , ele será exibido como ".". Isso não deve ser um problema, a menos que o cd do script esteja em outro lugar, mas se você precisar do caminho completo, poderá usá-lo:

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

Ou, poderia apenas cd para o diretório do script no início do script:

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}
    
por 09.11.2012 / 08:02