Unix como determinar se um programa pode ser executado

Unix como determinar se um programa pode ser executado

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 whichnã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.

informação relacionada