LINUX.ORG.RU

Bash-функция и анонимная труба

 , ,


0

1

Здравствуйте

Есть одна функция (_disown) для запуска програм и отвязки их от вызывающего шелла. Простые програмы она запускает без проблем. А вот если добавить трубу, то перестает работать. Подскажите, как исправить ситуацию?

function _disown {
  DISPLAY=:0 $@ >/dev/null 2>&1 & disown
}

my_text=$1
[ -z "$my_text" ] && my_text="WELCOME"

# dzen появляется, но без текста
_disown echo $my_text | dzen2 -bg orange -fg black -ta c -p 3

★★★★★

Последнее исправление: makoven (всего исправлений: 2)

А не, я прогнал. Тебе лучше так сделать:

function _disown {
  export DISPLAY=:0
  bash -c "$@" >/dev/null 2>&1 & disown
}

my_text=$1
[ -z "$my_text" ] && my_text="WELCOME"

# dzen появляется, но с текстом
_disown "echo $my_text | dzen2 -bg orange -fg black -ta c -p 3"

Ну или типа того.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо. Что-то я не подумал завернуть команду в строку. А чем будет отличаться указание DISPLAY через export от моего примера?

makoven ★★★★★
() автор топика
Ответ на: А так: от DonkeyHot

не работает

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

завернуть команду в строку

Твои желания достигли предела комфортности шела. В этом месте начинается слабо предсказуемое поведение. Стоит рассмотреть переписывание всего как-то иначе, т.к. угадывание количества кавычек и других косяков при пробеле в аргументах - ненужное развлечение.

DonkeyHot ★★★★★
()
Ответ на: комментарий от makoven

Насколько я знаю, в этом случае ничем. Ну, разве что может быть после вызова функции все остальные программы, запускаемые скриптом, помимо bash -c "$@" могут унаследовать переменную, но навряд ли. Надо почитать что-нибудь про область видимости переменных.

anonymous
()

А может disown вообще не нужен в скрипте? Я б вот так написал:

#!/usr/bin/bash

exec 1> /dev/null 2>&1

my_text=$1; [ -z "$my_text" ] && my_text="WELCOME"
export DISPLAY=:0
echo $my_text | dzen2 -bg orange -fg black -ta c -p 3  &

anonymous
()
Ответ на: комментарий от anonymous

Так тоже работает. Век живи - век учись

makoven ★★★★★
() автор топика

Очередные влажные лоровские фантазии на тему решения задачи, условия которой ТС даже не потрудился описать.
Этим ты, считай, просто обоссал всех форумчан(кроме меня, я увернулся в последний момент)

zolden ★★★★★
()
Ответ на: комментарий от Kroz

У меня не убивается в обоих случаях

makoven ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Если закроешь shell, в котором запущен скрипт, то скрипт кильнётся.

Закрываю щель, не киляется. А у тебя?

anonymous
()
Ответ на: комментарий от makoven

Нет, это не задача.
Задача породила этот вариант «ну, наверное, тут можно использовать сложную shell-конструкцию и трубу...и...наверное...надо будет её отвязывать потом».
Но из этого набора слов мы так ничего и не узнали о том, какая именно проблема решается, а лишь то, как она может решаться в теории

zolden ★★★★★
()
Ответ на: комментарий от zolden

Отписал в личку

Воу-воу, парень, полегче. Так вот кто мне карму заминусовал

makoven ★★★★★
() автор топика
Ответ на: комментарий от makoven

Такое условие и задача могут быть только в лабораторке. Иначе это твои домыслы по пути решения реальной задачи о которой ты умалчиваешь.

anonymous
()
Ответ на: комментарий от anonymous

Делаю цифровое меню для кафешки. Из г**на и палок bspwm, sxiv, surf и прочего. С управлением по ssh. И вот, пишу я в командной строке start для запуска браузера. И это не просто блокирует дальнейший ввод, но и выплевывает кучу GTK-мусора, как GTK это любит. Поэтому форк и отвязка io.

makoven ★★★★★
() автор топика
Последнее исправление: makoven (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.