Linuxターミナルコマンドの接続

Linuxターミナルコマンドの接続

EV3に話す機能があります

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

仕組みは簡単です

speak "Say this"

ファイルの内容を言いたいので、これを持っています。

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

printfの出力を文の周囲に引用符で囲むにはどうすればよいですか?

答え1

二重引用符を避けることができます

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

私のコンピュータに

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

catを使用する代わりにリダイレクトを使用できます。

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

答え2

espeakサポートの使用--stdinパイプから読み取るので、1つのオプションは、引数の代わりにパイプを使用するように関数呼び出しを変更し、printf出力を関数にパイプすることです。

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

あるいは、次のように他のコマンドの出力をspeak引数に渡すことができます(ただし、制御文字がある場合は機能しない可能性があります)。

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

関連情報