Eu tenho um Makefile que executa uma ferramenta que demora um pouco; permite-me substituir o comando usado:
make TOOL=alternative-tool
Gostaria de pular essa etapa no Makefile, por isso estou procurando um comando que saia com o status 0 e que tenha efeitos colaterais desprezíveis.
Obviamente, eu poderia usar true
, mas isso é meio confuso:
make TOOL=true
Parece que eu quero executar a ferramenta, mas não quero.
Existe um executável instalado por padrão que não /bin/true
saia com o status 0 e que tenha um nome atraente e fácil de digitar?
command-line
Roger Lipscombe
fonte
fonte
TOOL=true
estará na linha de comando ao chamar make, provavelmente documentado em um README nas proximidades. A linha real que chama a ferramenta está em algum lugar dentro de um makefile de 7000 linhas (de terceiros).Respostas:
Mesmo que você tenha solicitado algo que "não seja
/bin/true
", substituirtrue
pelo nome completo/bin/true
para mostrar que é otrue
programa e não algum outro significado de "verdadeiro" é provavelmente a melhor solução.Sua preocupação é que o
true
noparece ser algo diferente de um nome de comando. Mas se você escrever
então isso é inequivocamente um comando. Alguém pode interpretar mal o
TOOL=true
significado de alguma outra ferramenta em algum lugar, mas nãoTOOL=/bin/true
é provável que tal interpretação seja incorreta .Não tenho certeza de quando
:
, que é um shell embutido, mas não um comando externo, funcionará. Henning Makholm tem relatado que parece trabalho . Mas acho que não funciona em todas as situações e você descobriu que não funcionou para você .Quanto a um alias de shell, você não pode usá-lo porque a expansão de alias não é executada nos argumentos passados para um comando, nem os makefiles fazem uso de 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 usaria mesmo se o tivesse, porque seria um shell não interativo, onde a expansão do alias não é ativada automaticamente).fonte
:
parece funcionar bem para mim.make
sempre gera um shell para executar cada comando depois de fazer suas próprias substituições.:
, mas deveria ser uma resposta (especialmente se correta) e esse comentário não explica por que alguém deveria esperar que ela funcionasse. Em um diretório comhello.c
e sem makefile, ondemake hello
compilahello.c
parahello
, acheimake CC=: hello
comportado de acordo com o que você está dizendo.:
não funciona. Ser explícito/bin/true
é provavelmente a melhor maneira de fazê-lo.Embora eu concorde que usar o caminho completo para
true
seria a melhor solução, gostaria de observar qual é, de longe, a maneira mais comum de evitar a execução real de comandos: colocar umecho
na frente dele. Então:fonte
TOOL
que de outra forma faria. Sem-s
ou equivalente,make
emite informações redundantes, porque ambosmake
e oecho
comando executadomake
separadamente emitem saída. Por exemplo, quando eu corromake CC=echo hello
em um diretório que possuihello.c
e sem makefile, receboecho hello.c -o hello
como a primeira linha de saída ehello.c -o hello
como a segunda. Mas algumas compilações usam (ou o usuário pode adicionar)-s
e, em seguida, é útil.make -s CC=echo hello
dá apenashello.c -o hello
.Você sempre pode fazer seu próprio comando que não faz nada além de retornar um status de saída zero. Algumas opções:
um link simbólico nomeado adequadamente para
/bin/true
um script de shell vazio
um programa C quase vazio:
fonte
Crie um link simbólico no diretório de trabalho para / bin / true chamado algo como
skip
. Portanto...Então a linha de produção pode ser ...
fonte
Aqui está uma maneira de fazer isso com um pouco mais de caracteres:
Depois de ter feito isso uma vez que você pode re-executá-lo apenas usando o nome
T
.fonte