Saltar al contenido

¿Cómo conservar los espacios en blanco al guardar la salida del comando en una variable Makefile?

El paso a paso o código que encontrarás en este post es la resolución más eficiente y efectiva que hallamos a tus dudas o dilema.

Solución:

Quiero capturar esa salida en una variable y luego imprimir la variable en un archivo.

No parece haber una forma de evitar makeEl mecanismo de para traducir saltos de línea en la salida del comando de shell a espacios. Un poco de un truco que se mantiene cerca de su enfoque original sería hacer que el shell convierta las nuevas líneas en algún carácter poco común (como 1) al asignar la salida a la variable y luego hacer que la traduzca de nuevo cuando echo-ing esa variable al archivo. Algo como esto:

OUTPUT=$(shell cowsay hello | tr 'n' '1')

all:
        @echo "$(OUTPUT)" | tr '1' 'n' > output.txt

Para mí, esto resulta en

$ make
$ cat output.txt 
 _______ 
< hello >
 ------- 
           ^__^
           (oo)_______
            (__)       )/
                ||----w |
                ||     ||

Esta es una respuesta negativa, desafortunadamente. El GNU Make Manual establece (énfasis añadido):

los shell función realiza la misma función que realizan las comillas inversas en la mayoría de los shells: no expansión de comando. Esto significa que toma como argumento un comando de shell y evalúa la salida del comando. El único procesamiento make hace en el resultado es convertir cada nueva línea (o retorno de carro / par de nueva línea) en un solo espacio. Si hay una nueva línea final (retorno de carro y) simplemente se eliminará.

no creo que eval o define ayudará.

La única solución alternativa que puedo ver es almacenar el cowsay hellodominio en una variable, en lugar de la salida del comando, como en:

OUTPUT=$$(seq 5)     # seq 5 replaces cowsay hello

all:
    @echo "$(OUTPUT)" > output.txt

Esta solución es mala si cowsay hello es caro de calcular o tiene efectos secundarios. Una segunda solución es mantener su salida, pero reemplazar los saltos de línea con cualquier carácter arbitrario, usando por ejemplo sed, y luego agregar los saltos de línea nuevamente. Por ejemplo:

OUTPUT=$(shell seq 5 | sed s/$$/xxx/)            # add xxx to the end of each line

all:
    @echo -n $(OUTPUT) ' ' | sed 's/xxx /n/g'   # replace xxx-space with line break

Aquí tienes las comentarios y calificaciones

Nos puedes asistir nuestro ensayo ejecutando un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *