Encadenamiento de commands de terminal de Linux

Tengo una function que tiene mi EV3 hablar

speak(){ espeak -a 200 -s 130 -v la --stdout "$@" | aplay; } 

funciona simplemente

 speak "Say this" 

Quiero que diga el contenido de un file, así que tengo esto

 printf '%b\n' "$(cat joyPhrase)" 

¿Cómo se obtiene el resultado del printf en las cotizaciones para hablar?

espeak admite el uso de --stdin para leer desde una tubería, por lo que una opción sería cambiar la llamada de function para usarla en lugar de parameters, y conectar la salida printf a su function:

 speak(){ espeak -a 200 -s 130 -v la --stdout --stdin | aplay; } printf '%b\n' "$(cat joyPhrase)" | speak 

O puede pasar la salida de su otro command a los parameters de speak , así (aunque es less probable que funcione si hay caracteres de control):

 speak $(printf '%b\n' "$(cat joyPhrase)") 

Puedes escaping de las comillas dobles

 printf '%b\n' "\"$(cat joyPhrase)\"" 

En mi máquina

 $ echo this is a file >> testfile $ printf '%b\n' "\"$(cat testfile)\"" "this is a file" 

En lugar de usar cat, puedes utilizar la networkingirección:

 $ printf '%b\n' "\"$(< testfile)\"" "this is a file"