![Unix como determinar se um programa pode ser executado](https://rvso.com/image/617815/Unix%20como%20determinar%20se%20um%20programa%20pode%20ser%20executado.png)
Estou escrevendo um script para criar o ambiente de origem. Lidar com a parte PATH é fácil. Porém, como devo verificar se um programa pode ser executado corretamente quando seu caminho é adicionado ao PATH? Usar which
não é suficiente, pois apenas verifica a existência do executável, não executando-o. O que consegui agora é verificar a versão do programa (ou seja find -version
) e verificar se a mensagem de retorno contém " command not found
". Não é o ideal. Existe uma maneira melhor de fazer isso?
Responder1
Não acho que exista uma maneira ideal de fazer o que você deseja. Como Martin diz, você pode verificar se o bit executável está definido, mas isso não confirmará se ele realmente será executado.
Uma coisa que você pode fazer é tentar executar o programa e, em vez de procurar um texto específico no próprio programa, observe a $?
variável. Isso retorna o status de saída do programa (convencionalmente 0 para OK) ou (em um sistema CentoOS que tenho em mãos) 127 para arquivo não encontrado, por exemplo
find --version
if [[ $? == 127 ]]
then
exit 1
fi
A razão pela qual não existe uma maneira ideal é que um status de saída 0 para OK é apenas convencional e os programas podem retornar status de saída diferentes se forem executados, mas encontrarem um erro. Isso pode funcionar para você até que algo seja executado e retorne um status de saída 127 para indicar alguma condição de erro.
Responder2
Você pode usar o-x
operadorpara testar se o sinalizador executável está definido em um arquivo. Ele não informa se o executável realmente será executado.