Отображение stdout фонового процесса в определенном месте терминала

Можно использовать:

dpkg -L package-name-goes-here

... иметь список файлов, которые были установлены определенным пакетом. Если Вы просто хотите исполняемые файлы:

for file in `dpkg -L package-name-goes-here`
do
  if [ -x $file -a ! -d $file ] # must be executable, but not a directory.
  then
    echo $file
  fi
done

Вот наивно, торопливо записанный сценарий, который делает вышеупомянутое. Использование: exec-files-from-package [package].

8
27.05.2011, 14:05
1 ответ

Это - простое решение, если Вы готовы принять вывод чуть выше текущей быстрой строки.

TRAPUSR1 () { zle -I; unfunction TRAPUSR1 }  # invalidate prompt on signal USR1

bufferout () {
    local buffer
    while read -r line; do                   # buffer lines from stdin
        buffer="$buffer$line\n"
    done
    print -rn -- $terminfo[dl1]              # delete current line
    print -rn -- $terminfo[cr]               # move cursor to BOL
    printf "$buffer"                         # print buffer
    kill -USR1 $$                            # send USR1 when we're done
}

unsetopt monitor                             # don't monitor this job
./testout |& bufferout & disown              # bg and disown to suppress notification
setopt monitor                               # restore job monitoring

Когда задание будет сделано, текущая подсказка и входной буфер будут удалены и полнота команды stdout и stderr будет распечатан.

Можно стать намного более необычными, чем это с zsh/curses модуль, но я сомневаюсь, что он предложил бы преимущество, достаточно значительное для заслуживания усилия.

5
27.01.2020, 20:13
  • 1
    Это работает. Но как трудно это должно было бы препятствовать тому, чтобы оболочка печатала pid процесса, при отправке в фон и "сделанное" сообщение после завершения? (Я имею в виду, временно деактивируют ту функцию). Кроме того, прежде, чем поместить вывод на терминал, как трудно это должно было бы очистить существующую быструю строку или строки? –  unode 16.02.2012, 21:22
  • 2
    я думаю, что у меня могла бы быть некоторая другая подсказка, переписывает конфигурацию, которая сталкивается с удалением начальной подсказки. Мой не уходит, после того как команда заканчивается. Я также все еще получаю PIDs процессов при отправке в фон, но "сделанной" строки не стало. В любом случае я принимаю Ваш ответ, поскольку это достаточно близко к тому, что я имел в виду.Спасибо. –  unode 17.02.2012, 00:32
  • 3
    я использую xterm и мне включили модуль VCS и некоторые другие настройки к подсказке. Я не попробовал, но я совершенно уверен, что это связано с этим. Некоторое время назад я пытался использовать vi режим notifier подобный этому (stackoverflow.com/a/3791786/125801) и когда активный я потерял часть своего пользовательского быстрого поведения. Это не имеет большого значения в данный момент я доволен решением. Я попробую к очистке свою подсказку на днях и проверю, обнаруживаются ли PIDs все еще. –  unode 17.02.2012, 02:22
  • 4
    Zsh-4.3.10, после отключения в значительной степени каждой настройки, я теперь больше не получаю подсказку (т.е. это правильно удалено), но я все еще получаю PIDs процессов в фоне, как [1] 27911 27912 в одной строке и как первая строка на терминале. –  unode 17.02.2012, 02:51
  • 5
    Может я upvote снова?:) Это прекрасно теперь! Огромное спасибо. –  unode 20.02.2012, 21:07

Теги

Похожие вопросы