После использования команды bg можно ли перенаправить вывод, например nohup?

Вы можете попробовать использовать привязку клавиш вместо команд.

В случае, если вы хотите, чтобы обе команды были доступны в рамках одной комбинации, тогда поместите в файл config ~/.config/zathura/zathurarc что-то вроде:

map  feedkeys ":set recolor-lightcolor \#002b36:set recolor-darkcolor \#839496"

PS. Не уверен, зачем вам это нужно, но если вы также можете просто сохранить это по умолчанию в том же конфигурационном файле, так что он будет загружаться каждый раз, когда вы запускаете zathura без дополнительных движений. Просто добавьте свои строки в упомянутый выше файл конфига.

PS. Более подробную информацию о конфигурационном файле вы можете найти на странице официальной документации

2
05.03.2017, 07:42
1 ответ

Этот метод не рекомендуется. Не используйте. Если это сломает вашу систему, вы сохраните все части.

Хорошо! Все еще со мной? Для несложного случая с соответствующими включениями ( fcntl , для open ) перенаправление стандарта в другое место (теоретически) возможно:

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void)
{
    while (1) {
        printf("blat\n");
        sleep(1);
    }
    exit(EXIT_SUCCESS);
}

Скомпилировано и запускается:

$ cc -g    blat.c   -o blat
$ ./blat &

Теперь в каком-либо другом терминале (это может привести к нарушению политик безопасности по разным очевидным причинам, учитывая то, что отладчик может делать с живым процессом) с использованием PID, выданного для фонового задания:

$ gdb -q -p 3727
...
(gdb) call close(1)
$1 = 0

После чтения close (2) мы определяем, что это успешно, стандартный ввод закрыт. Давайте откроем новый файл ...

(gdb) call open("/home/userrunningblat/blat.out", O_CREAT|O_WRONLY, 0666)
No symbol "O_CREAT" in current context.

Ну стреляйте. В каком магическом числе отсутствуют эти символы? В третьем терминале, используя нашу удобную compile-and-execute-some-C-программу :

$ cfu 'printf("%d\n", O_CREAT|O_WRONLY)'
65

Или вы можете зайти в каталог / usr / include и выяснить форматы ввода и побитовое ИЛИ сами, но это очень раздражает. (Обратите также внимание на то, что эти числа могут варьироваться в зависимости от ОС.) Вернемся к gdb !

(gdb) call open("/home/userrunningblat/blat.out", 65, 0666)
$2 = 1
(gdb) quit
$ tail -f blat.out

Это означает, что, поскольку мы ранее закрыли стандартный выход ( 1 ), этот вызов open (2) повторно использовал этот номер дескриптора файла, поэтому после выхода из gdb стандартный выход теперь должен идти к этому файлу.

Этот метод может быть невозможен для более сложных программ, может быть невозможен из-за ограничений безопасности, отсутствия информации отладчика, может вызвать ужасную поломку и т. Д.

3
27.01.2020, 22:03

Теги

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