Chaînage des commands du terminal Linux

J'ai une fonction qui a mon EV3 parler

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

cela fonctionne simplement

 speak "Say this" 

Je veux qu'il dise le contenu d'un file, donc j'ai ceci

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

Comment get la sortie de la printf dans les guillemets pour parler?

espeak prend en charge l'utilisation de --stdin pour lire à partir d'un tube, donc une option serait de changer votre appel de fonction pour l'utiliser à la place des parameters, et de diriger la sortie printf dans votre fonction:

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

Ou vous pouvez passer la sortie de votre autre command pour speak les parameters, comme ceci (bien que cela soit less susceptible de fonctionner s'il y a des caractères de contrôle):

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

Vous pouvez échapper aux guillemets

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

Sur ma machine

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

Au lieu d'utiliser chat, vous pouvez utiliser la redirection:

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