Unix como determinar se um programa pode ser executado

2

Estou escrevendo um script para criar o ambiente de origem. Manipular a parte do PATH é fácil. Embora 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 o executando. O que eu tenho agora é verificar a versão do programa (por exemplo, find -version ) e verificar se a mensagem de retorno contém " command not found ". Não é ideal. Existe uma maneira melhor de fazer isso?

    
por Stan 13.09.2013 / 13:55

2 respostas

2

Eu não acho que haja uma maneira ideal de fazer o que você quer. Como Martin diz, você pode verificar se o bit executável está definido, mas isso não confirma que ele será realmente executado.

Uma coisa que você pode fazer é tentar executar o programa e, em vez de procurar por um texto específico do próprio programa, veja a variável $? . Isto devolve o estado de saída do programa (convencionalmente 0 para OK) ou (num sistema CentoOS que tenho de entregar) 127 para o ficheiro não encontrado, por ex.

find --version
if [[ $? == 127 ]]
then
    exit 1
fi

A razão de não existir uma maneira ideal é que um status de saída de 0 para OK seja apenas convencional e os programas retornem um status de saída diferente se forem executados, mas encontrarem um erro. Isso pode funcionar para você até que algo seja executado e retorne um status de saída de 127 para indicar alguma condição de erro.

    
por 13.09.2013 / 14:37
1

Você pode usar o operador -x a> para testar se o sinalizador de executável está definido em um arquivo. Não lhe diz se o executável irá realmente rodar.

    
por 13.09.2013 / 14:26