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파이프에서 읽으므로 한 가지 옵션은 인수 대신 파이프를 사용하도록 함수 호출을 변경하고 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)")

관련 정보