web-dev-qa-db-ja.com

Linuxターミナルコマンドの連鎖

EV3に話しかける機能があります

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

それは単に

speak "Say this"

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

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

Printfからの出力をspeakの引用符にどのように取得しますか?

3
OrigamiEye

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)")
1
user4443

二重引用符をエスケープできます

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"
1
JayJay