Страница 1 из 1

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

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


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

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

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

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

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

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

function foo() {
    echo $1
}

var1="123"

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

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

Добавлено: 30 дек 2023, 14:43
vir0id
Ну вот смотри. Есть код

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

#!/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?

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

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

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

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