Tengo un Makefile que ejecuta una herramienta que lleva un poco de tiempo; me permite reemplazar el comando utilizado:
make TOOL=alternative-tool
Me gustaría omitir ese paso en el Makefile, por lo que estoy buscando un comando que salga con el estado 0 y que tenga efectos secundarios insignificantes.
Obviamente, podría usar true, pero eso es un poco confuso:
make TOOL=true
Eso se lee como si quisiera ejecutar la herramienta, pero no lo hago.
¿Existe un ejecutable instalado por defecto que no /bin/truesalga con el estado 0 y que tenga un nombre pegadizo y fácil de escribir?
command-line
Roger Lipscombe
fuente
fuente

TOOL=trueestará en la línea de comando cuando invoque make, probablemente documentado en un archivo README cercano. La línea real que invoca la herramienta está en algún lugar dentro de un archivo MAKE de 7000 líneas (de terceros).Respuestas:
Aunque haya pedido algo que "no es
/bin/true", la mejor solución es reemplazarlotruecon el nombre completo/bin/truepara mostrar que es eltrueprograma en lugar de algún otro significado de "verdadero".Su preocupación es que el
trueenparece ser algo más que un nombre de comando. Pero si escribes
entonces eso es inequívocamente un comando. Alguien podría interpretar mal el
TOOL=truesignificado de alguna otra herramienta en algún lugar, pero noTOOL=/bin/truees probable que se lea mal .No estoy seguro de cuándo funcionará
:, que es un shell incorporado pero no un comando externo. Henning Makholm ha informado que parece funcionar . Pero creo que no funciona en todas las situaciones, y descubrió que no funcionó para usted .En cuanto a un alias de shell, no puede usarlo porque la expansión de alias no se realiza en los argumentos que pasa a un comando, ni los archivos make hacen uso de alias de shell previamente definidos. Incluso si
makeejecuta sus comandos en un nuevo shell, ese shell no tendrá el alias (y no lo usaría incluso si lo tuviera, porque sería un shell no interactivo, donde la expansión de alias no se habilita automáticamente).fuente
:parece funcionar bien para mí.makesiempre genera un shell para ejecutar cada comando después de haber realizado sus propias sustituciones.:, pero debería ser una respuesta (especialmente si es correcta) y ese comentario no explica por qué uno debería esperar que funcione. En un directorio conhello.cy sin makefile, dondemake hellocompilahello.cahello, me encontré conmake CC=: hellocomportado de acuerdo con lo que está diciendo.:no funciona. Ser explícito sobre/bin/truees probablemente la mejor manera de hacerlo.Si bien estoy de acuerdo en que usar la ruta completa para
truesería la mejor solución, me gustaría señalar cuál es, con mucho, la forma más común de evitar la ejecución real de comandos: pegar unaechodelante de ella. Entonces:fuente
TOOLque de otra manera haría. Sin-so equivalente,makeemite información redundante, porque ambosmakey elechocomando ejecutado pormakeseparado emiten salida. Por ejemplo, cuando ejecutomake CC=echo helloen un directorio que tienehello.cy no tiene un archivo MAKE, obtengoecho hello.c -o hellocomo la primera línea de salida yhello.c -o hellocomo la segunda. Pero algunas compilaciones usan (o el usuario puede agregar)-s, y luego es útil.make -s CC=echo helloda justohello.c -o hello.Siempre puede hacer su propio comando que no hace nada más que devolver un estado de salida cero. Algunas opciones:
un enlace simbólico con nombre apropiado para
/bin/trueun script de shell vacío
un programa C casi vacío:
fuente
Cree un enlace simbólico en el directorio de trabajo a / bin / true llamado algo así
skip. Así...Entonces la línea de creación puede ser ...
fuente
Aquí hay una manera de hacerlo con un poco más de caracteres:
Después de haberlo hecho una vez, puede volver a ejecutarlo simplemente usando el nombre
T.fuente