Comando que sai com status zero (não / bin / true)?

11

Eu tenho um Makefile que executa uma ferramenta que demora um pouco; isso me permite substituir o comando usado:

make TOOL=alternative-tool

Eu gostaria de pular essa etapa no Makefile, então estou procurando um comando que saia com status 0 e tenha efeitos colaterais insignificantes.

Obviamente, eu poderia usar apenas true , mas isso é meio confuso:

make TOOL=true

Isso é como se eu quisesse executar a ferramenta, mas não o faço.

Existe um executável instalado por padrão que não é /bin/true e sai com status 0, e esse nome é cativante e fácil de digitar?

    
por Roger Lipscombe 19.04.2018 / 13:34

5 respostas

42

Mesmo que você tenha solicitado algo que "não seja /bin/true ", substituindo true pelo nome completo /bin/true para mostrar que é o programa true em vez de algum outro significado de "true" é provavelmente a melhor solução.

Sua preocupação é que o true em

make TOOL=true

parece ser algo diferente de um nome de comando. Mas se você escrever

make TOOL=/bin/true

então isso é inequivocamente um comando. Alguém pode interpretar mal o TOOL=true para significar que alguma outra ferramenta em algum lugar é intencional, mas não é provável que tal interpretação equivocada de TOOL=/bin/true seja possível.

Não tenho certeza de quando o : , que é um shell embutido, mas não um comando externo, funcionará. Henning Makholm tem informou que parece funcionar . Mas eu acho que não funciona em todas as situações, e você descobriu que não funcionou para você .

Como para um alias de shell, você não pode usá-lo porque a expansão de alias não é executada nos argumentos que você passa para um comando, nem os makefiles usam os aliases de shell definidos anteriormente. Mesmo se make executar seus comandos em um novo shell, esse shell não terá o alias (e não o utilizaria mesmo se o tivesse, porque seria um shell não interativo, em que a expansão de alias não é ativada automaticamente).

    
por Eliah Kagan 19.04.2018 / 13:46
9

Embora eu concorde que usar o caminho completo para true seria a melhor solução, gostaria de observar o que provavelmente é, de longe, a maneira mais comum de evitar a execução real de comandos: colando um echo na frente dele . Então:

make TOOL=echo
    
por muru 19.04.2018 / 16:49
6

Você sempre pode fazer seu próprio comando que não faz nada, mas retorna um status de saída zero. Algumas opções:

  • um link simbólico nomeado apropriadamente para /bin/true

  • um script de shell vazio

  • um programa C quase vazio:

    int main() {
        return 0;
    }
    
por David Foerster 19.04.2018 / 17:17
0

Crie um link simbólico no diretório de trabalho para / bin / true chamado algo como skip . Assim ...

skip -> /bin/true

Então a linha do make pode ser ...

make TOOL=./skip
    
por DocSalvager 25.04.2018 / 00:07
-2

Aqui está uma maneira de fazer isso com um pouco mais de caracteres:

function T() { /bin/true; }

Depois de fazer isso, você poderá reexecutá-lo usando apenas o nome T .

false; T; echo $?
    
por Lee B 20.04.2018 / 20:08