Как перенаправить ввод/вывод в yad?

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
vir0id
Сообщения: 2757
Зарегистрирован: 19 дек 2017, 18:48
Решено: 15
Откуда: Рига
Благодарил (а): 163 раза
Поблагодарили: 305 раз
Контактная информация:

Как перенаправить ввод/вывод в yad?

#1

30 дек 2023, 10:19

Всем привет. Есть код(foo), который что-то делает и перенаправляет вывод в stdout/stderr
function foo() {
бла-бла-бла-блатная информация 2>&1
}


Как можно сделать перенаправление ИЗ stdout в (foo2)?
2>&1 > foo2

Если такой финт вообще возможет?

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Как перенаправить ввод/вывод в yad?

#2

30 дек 2023, 12:35

vir0id, а ты опиши что ты хочешь сделать. Так проще будет понять и дать ответ. А то выглядит как "удаление гланд через жопу"

К примеру можно сделать что-то такое

Код: Выделить всё

function foo() {
    echo $1
}

var1="123"

foo $(echo $var1)
Тут функция принимает вывод другой функции как аргумент и выводит его
ИзображениеИзображение

Аватара пользователя

Автор темы
vir0id
Сообщения: 2757
Зарегистрирован: 19 дек 2017, 18:48
Решено: 15
Откуда: Рига
Благодарил (а): 163 раза
Поблагодарили: 305 раз
Контактная информация:

Как перенаправить ввод/вывод в yad?

#3

30 дек 2023, 14:43

Ну вот смотри. Есть код

Код: Выделить всё

#!/usr/bin/bash

#{1..$(echo $(<"/home/vir0id/log_play_info") | wc -l ~/log_play_info | awk '{print $1}')}
#Serash youtube

log_play_info="$HOME/log_play_info"

if [[ -f /usr/bin/mpv && /usr/bin/yad ]]; then

function info_playlist() {
 mpv --fs -ao=pulse --no-video --shuffle --script-opts-append=osc-visibility=always --term-playing-msg='Title: ${media-title}' "$input" 2>&1 | yad \
 --image="$HOME/.config/i3/scripts/polybar-mpv/icons/youtube.svg" \
 --geometry=20x40+500+400 \
 --fontname="Iosevka Term Regular 12" \
 --wrap --justify="center" \
 --margins=1 \
 --tail \
 --editable \
 --fore="#bb9af7" \
 --back="#16161E" \
 --listen \
 --auto-close \
 --auto-kill \
 --monitor \
 --text-info &
}

function info_track() {
 mpv --fs ytdl://ytsearch:"$input" --no-video -ao=pulse --script-opts-append=osc-visibility=always --term-playing-msg='Title: ${media-title}' 2>&1 | yad \
 --image="$HOME/.config/i3/scripts/polybar-mpv/icons/youtube.svg" \
  --geometry=20x40+500+400 \
  --fontname="Iosevka Term Regular 12" \
  --wrap \
  --justify="center" \
  --margins=1 \
  --tail \
  --editable \
  --fore="#bb9af7" \
  --back="#16161E" \
  --listen \
  --auto-close \
  --auto-kill \
  --monitor \
  --text-info &
}

function mpv_audio() {

function close_exit() {
   killall mpv
   killall yad
}

export -f close_exit
export -f info_playlist
export -f info_track

input=$(yad \
 --title="Search-tube" \
 --text="Press Enter:" \
 --image="$HOME/.config/i3/scripts/polybar-mpv/icons/youtube.svg" \
 --icon-size=48 \
 --form \
 --field="  Your track or playlist URL:  " \
 --button="Exit:bash -c close_exit" \
 --fixed \
 --width=800 \
 --height=100 \
 --separator="\t")
 
if [[ $input =~ "https" ]]; then
   info_playlist
else
   info_track
fi

}

function mpv_video() {

function close_exit() {
   killall mpv
   killall yad
}

export -f close_exit

input=$(yad \
 --title="Search-tube" \
 --text="Press Enter:" \
 --image="$HOME/.config/i3/scripts/polybar-mpv/icons/youtube.svg" \
 --icon-size=48 \
 --form \
 --field="  Your video or playlist URL:  " \
 --button="Exit:bash -c close_exit" \
 --fixed \
 --width=800 \
 --height=100 \
 --separator="\t")
 
if [[ $input =~ "https" ]]; then
   mpv -ao=pulse --shuffle --term-playing-msg='Title: ${media-title}' "$input"
else
   mpv ytdl://ytsearch:"$input" -ao=pulse --term-playing-msg='Title: ${media-title}'
fi

}

function close_exit_sec() {
   killall mpv
   killall yad
}

function close() {
   killall yad
}

export -f mpv_audio
export -f mpv_video
export -f close_exit_sec
export -f close
export -f info_playlist
export -f info_track

endoff=$(yad \
   --title="Search-tube" \
   --text="What are you want?" \
   --image="$HOME/.config/i3/scripts/polybar-mpv/icons/youtube.svg" \
   --text-align=center \
   --fixed \
   --width=280 \
   --height=100 \
   --button-align=center \
   --button="!$HOME/.config/i3/scripts/polybar-mpv/icons/window-close.svg!Exit:bash -c close_exit_sec" \
   --button="!$HOME/.config/i3/scripts/polybar-mpv/icons/go-down-skip.svg!Close:bash -c close" \
   --button="!$HOME/.config/i3/scripts/polybar-mpv/icons/monitor.svg!Display:bash -c (отдельная функция yad)" \
   --button="!$HOME/.config/i3/scripts/polybar-mpv/icons/audio-volume-medium.svg!Audio:bash -c mpv_audio" \
   --button="!$HOME/.config/i3/scripts/polybar-mpv/icons/filmgrain.svg!Video:bash -c mpv_video" \
   --separator="\t")

   else
    echo "Please install mpv and yad"
fi

Это кастомный псевдоплеер в связке mpv+ytdlp+yad. В нем(коде) срабатывает функция со связкой mpv+ytdlp, и вывод терминала уходит в stdout/stderr, а затем уходит в yad. После чего, yad видит информацию о треке (время,скорость передачи и тд..). Мне это всё нужно вывести на кнопку Display, да только так, что бы yad это видел и открывал свою "консоль/окно". Для этого мне нужно создать (отдельную функцию yad) и скармливать туда выводы от info_playlist или info_track. Дальше нужно выводить информацию в (отдельную функцию yad) чтоб она обновлялась, а не выходила целым потоком.
Вопрос: Как скормить конечный вывод stdout/stderr от функций info_playlist или info_track в (отдельную функцию yad)?
Ну и еще один вопрос: Как обновлять информацию поступающую в (отдельную функцию yad) из stdout/stderr?

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Как перенаправить ввод/вывод в yad?

#4

30 дек 2023, 15:29

vir0id, тогда пиши вывод в файл и читай этот файл через функцию, когда хочешь. Хоть посимвольно, хоть построчно, хоть целиком.
ИзображениеИзображение

Аватара пользователя

Автор темы
vir0id
Сообщения: 2757
Зарегистрирован: 19 дек 2017, 18:48
Решено: 15
Откуда: Рига
Благодарил (а): 163 раза
Поблагодарили: 305 раз
Контактная информация:

Как перенаправить ввод/вывод в yad?

#5

30 дек 2023, 15:32

rogoznik писал(а):
30 дек 2023, 15:29
vir0id, тогда пиши вывод в файл и читай этот файл через функцию, когда хочешь. Хоть посимвольно, хоть построчно, хоть целиком.
Я пробовал. Не пишет. Хз чего я делаю не так

Ответить

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость