Encadeando comandos do terminal Linux

3

Eu tenho uma função que tem meu EV3 speak

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

funciona simplesmente

speak "Say this"

Eu quero dizer o conteúdo de um arquivo, então eu tenho isso

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

Como obter a saída do printf nas cotações para falar?

    
por OrigamiEye 03.05.2016 / 21:07

2 respostas

2

espeak suporta o uso de --stdin para ler de um canal, portanto, uma opção seria alterar sua função chama para usar isso ao invés de parâmetros, e canaliza a saída do printf para a sua função:

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

Ou você pode passar a saída do seu outro comando para os parâmetros de speak , como este (embora seja menos provável que funcione se houver caracteres de controle):

speak $(printf '%b\n' "$(cat joyPhrase)")
    
por 03.05.2016 / 21:17
1

Você pode escapar das aspas duplas

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

Na minha máquina

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

Em vez de usar o cat, você pode usar o redirecionamento:

$ printf '%b\n' "\"$(< testfile)\""
"this is a file"
    
por 03.05.2016 / 21:18

Tags