2016-09-28 3 views
2

Выход обоего pactl list sink-inputs и pacmd list-sink-inputs содержит раздел Свойства:Посмотрите индекс раковины входного PulseAudio свойства

Properties: 
    media.name = "ALSA Playback" 
    application.name = "ALSA plug-in [snapclient]" 
    native-protocol.peer = "UNIX socket client" 
    native-protocol.version = "29" 
    application.process.id = "6393" 
    application.process.user = "root" 
    application.process.host = "xxxxxx" 
    application.process.binary = "snapclient" 
    application.language = "C" 
    application.process.machine_id = "8dadf95c2f504864bc0f8b3ab149cbe0" 
    application.process.session_id = "c4" 
    module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [snapclient]" 

Я интересно, если есть способ, чтобы непосредственно искать индекс раковины-вход либо application.process.id, либо application.process.binary, не прибегая к синтаксическому анализу множества строк вывода вышеупомянутых команд или записи отдельной программы на С.

ответ

0

Хотя это делает синтаксический вывод и пока не делать каких-либо соответствия для идентификатора вы можете искать, этот метод обеспечивает способ, с некоторыми изменениями, чтобы получить эту информацию по раковине ID:

pactl list sink-inputs | while read -r line ; do 

    #echo "Processing ${line}" 
    echo $line | grep -oP 'Sink Input #\K[^$]' 
    echo $line | grep -oP 'application.process.id = "\K[^"]+' 
    echo $line | grep -oP 'application.process.binary = "\K[^"]+' 

done 
0

Некоторые команды также принимают уникальное имя вместо идентификатора, но те, которые вы пытаетесь использовать, по-видимому, не в состоянии сделать это. Возможно, потому, что имя не уникально и могут быть совпадающие совпадения. Вам нужно разобрать его самостоятельно. Это то, что я придумал:

pacmd list-sink-inputs | 
tr '\n' '\r' | 
perl -pe 's/ *index: ([0-9]+).+?application\.name = "([^\r]+)"\r.+?(?=index:|$)/\2:\1\r/g' | 
tr '\r' '\n' 

perl -pe, как sed, только лучше. Это в основном соответствует index: [id] [anything] application.name = [name] [anything] и форматирует вывод на что-то вроде

3 sink input(s) available. 
"speech-dispatcher":166 
"SoX":407 
"Clementine":413 

которые вы затем можете вычленить или SED.

 Смежные вопросы

  • Нет связанных вопросов^_^