Estou escrevendo um script wrapper para envolver a execução de outro comando; neste caso, o kitchen
comando Chef. Meu script também será chamado kitchen
e colocado mais cedo $PATH
para que a execução kitchen
do bash execute meu script wrapper.
A questão é: como eu chamo a versão original do kitchen
? A maneira óbvia, é claro, é apenas fornecer o caminho completo - basta colocar /usr/bin/kitchen
o script, mas outra pessoa pode instalá-lo em um caminho diferente. E é claro que isso exclui qualquer outro script wrapper — seria bom se a solução fosse empilhável.
Duas abordagens vêm à mente, ambas variantes sobre o mesmo tema:
- No script, passe por
$PATH
. Compare cada entrada$(dirname "$0")
usandostat
o número do dispositivo e o número do inode para ver se é o mesmo diretório. Em caso afirmativo, remova-o de$PATH
. Então pode apenas chamarkitchen
, porque não deve chamar novamente o script wrapper. - Semelhante ao nº 1, mas faça a
$PATH
pesquisa manualmente no script e usestat
em cada resultado vs.$0
. Continue pulando até nos encontrarmos, então use o próximo encontrado. Se nunca nos encontrarmos, basta executá-lo normalmente (para lidar com o caso em que o wrapper não está,$PATH
mas foi executado fornecendo um caminho para ele)
Existe uma maneira melhor? Ou o código para fazer isso já existe em algum lugar em um sistema típico Debian ou Ubuntu Linux?