필자는 Pulseaudio 입력 / 출력을 제어하기 위해 Linux에 작은 bash 스크립트를 작성하고 있습니다.
내가하고 싶은 일은 하나를 제외한 모든 싱크 입력을 하나 또는 다른 싱크대로 라우팅하는 것입니다. 나가고 싶지 않은 싱크 입력은 다음과 같습니다.
pi@raspberrypi:~/fonction $ pactl list sink-inputs
Sink Input #36062
Driver: protocol-native.c
Owner Module: 2
Client: 198
Sink: 2
Sample Specification: s16le 2ch 44100Hz
Channel Map: front-left,front-right
Format: pcm, format.sample_format = "\"s16le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\""
Corked: no
Mute: no
Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB
balance 0.00
Buffer Latency: 120000 usec
Sink Latency: 236349 usec
Resample method: n/a
Properties:
media.name = "ALSA Playback"
application.name = "ALSA plug-in [snapclient]"
native-protocol.peer = "UNIX socket client"
native-protocol.version = "32"
application.process.id = "539"
application.process.user = "snapclient"
application.process.host = "raspberrypi"
application.process.binary = "snapclient"
application.language = "C"
application.process.machine_id = "69e523231bb44f2e926a758a63cbb5b1"
module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [snapclient]"
싱크 입력을 다른 싱크로 이동하려면이 명령을 사용해야합니다.
pactl move-sink-input <sink-input id> <sink id>
그래서 첫 번째 명령의 결과를 파싱하여 Sink Input #ID
(첫 번째 줄에 포함되어 있음)하지만 조건을 사용하여 확인해야합니다. module-stream-restore.id
(마지막 줄)은 실제로 내가 원하는 경로입니다.
나는 다음과 같은 것을 필요로 할 것이다 :
if [ <last line> = 'sink-input name I need' ]
then
pactl move-sink-input <id from first line> <my sink name>
fi
난 그냥 두 가지 정보를 얻으려면 명령을 구문 분석하는 방법을 모르겠다.
지금 당장은 마지막 줄이나 #ID 만 얻을 수 있습니다.
pactl list short sink-inputs|while read stream; do
streamId=$(echo $stream )
id=$(echo pactl list sink-inputs | grep module-stream-restore.id | grep -o '".*"' |sed 's/"//g')
if [ "$streamId" != 'sink-input-by-application-name:ALSA plug-in [snapclient]' ]
then
pactl move-sink-input "$streamId" Snapcast
fi
결과를 파싱하려면 어떻게해야합니까? pactl list sink-inputs
그래서 나는 bash 스크립트에서 그 명령의 결과의 각 "블록"(일명, 각 싱크 - 입력)에서 단지 하나가 아닌 두 가지 요소를 읽을 수 있습니까?
head -n1
과 tail -n1
또는 sed '1!d'
과 sed '$!d'