Desculpe se esta é uma pergunta estúpida, mas eu pesquisei sem sucesso.
O que exatamente a segunda linha faz?
#!/bin/sh
cd ${0%/*} || exit 1
Eu sei que o primeiro é o shebang, o segundo tenta mudar de diretório, mas a parte confusa é ${0%/*}
.
Você pode me explicar essa segunda linha?
command-line
sh
Navaro
fonte
fonte
dirname
comando$(dirname $0)
dirname
e incorporada? Certamente não está no Bash v4.3.11, que é o shell padrão no Ubuntu Trusty.dirname
não é um shell embutido.Respostas:
${0}
é o primeiro argumento do script, ou seja, o nome ou caminho do script. Se você lançar o seu script comopath/to/script.sh
, em seguida,${0}
será exatamente essa seqüência:path/to/script.sh
.A
%/*
parte modifica o valor de${0}
. Significa: use todos os caracteres até ser/
seguido por um nome de arquivo. No exemplo acima,${0%/*}
serápath/to
.Você pode vê-lo em ação no seu shell:
Sh suporta muitos outros tipos de "substituição de parâmetro". Aqui está, por exemplo, como usar o nome do arquivo em vez do caminho:
Em geral,
%
e%%
sufixos de tira, enquanto#
e##
prefixos de tira. Você pode ler mais sobre a substituição de parâmetros .fonte
|| exit 1
pode ser necessário porquecd
pode sair com o status 2, não 1, por erro. No entanto, concordo que não é muito útil (geralmente os programas não se preocupam com status de saída específicos). Provavelmente isso faz parte de um script maior?