Como especificar a localização atual do arquivo em lote (.command) no Mac OS X

Como especificar a localização atual do arquivo em lote (.command) no Mac OS X

Eu tenho um arquivo em lote (.command) no qual clico duas vezes para trabalhar. Ele tem dependências de arquivos na mesma pasta, mas se eu clicar duas vezes no arquivo .command ele simplesmente inicia e assume que o local atual é /~

Como encontro/especifico a localização do arquivo .command no próprio script, para poder consultar os ativos relativos?

Responder1

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 que está:

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

... e então use isso para encontrar arquivos relativos ao script, por exemplo cp "$mydir/fileInTheSameFolder" /tmp(e sempre use aspas duplas, como fiz aqui).

Observe que este pode ser um caminho relativo; por exemplo, se o script foi executado a partir de um shell interativo com ./scriptname.command, ele sairá apenas 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á usar isto:

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

Ou poderia apenas cdacessar o diretório do script no início do script:

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

informação relacionada