Возможно, я неправильно понимаю, но вы не можете изменить аргументы командной строки, которые загрузчик передает ядру после того, как вы уже запустили ядро, насколько я знаю,... если вы имеете в виду, как настроить параметры ядра во время выполнения, то инструмент называется sysctl
.
Если, например,ты хотел изменить:
sysctl -w kernel.stack_tracer_enabled=1
Эти изменения будут потеряны после перезагрузки.
Все команды в конвейере запускаются практически одновременно. Их синхронизирует только ввод-вывод по каналу. Кроме того, канал может содержать столько информации, сколько позволяет буфер канала.
Таким образом, вы не можете избежать запуска одного этапа конвейера, потому что
Вместо этого запишите вывод в файл, дав конвейеру завершить работу. Затем используйте этот файл.
Пример (как функция с одним аргументом):
myman () {
tmpfile=$( mktemp )
if man -k "$1" | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf >"$tmpfile" && [ -s "$tmpfile" ]
then
zathura "$tmpfile"
fi
rm -f "$tmpfile"
}
Кроме того, программа zathura
не будет запускаться, если конвейер выйдет из строя, (часть xargs
вернет не -ноль )или сгенерированный файл будет пустым.
В оболочке bash
вы также можете установить параметр оболочки pipefail
с set -o pipefail
, чтобы конвейер возвращал статус выхода первой неудачной команды в конвейере. И вы хотели бы сделать переменную tmpfile
local
:
myman () {
local tmpfile=$( mktemp )
if [ -o pipefail ]; then
set -o pipefail
trap 'set +o pipefail' RETURN
fi
if man -k "$1" | dmenu -l 20 | awk '{print $1}' | xargs -r man -Tpdf >"$tmpfile"
then
zathura "$tmpfile"
fi
rm -f "$tmpfile"
}
Это устанавливает параметр pipefail
на время действия функции, если он еще не был установлен, а затем при необходимости снимает его. Он избавляется от теста -s
в выходном файле.
Файлы PDF должны быть доступны для поиска; любому просмотрщику PDF придется сначала просмотреть трейлер, а оттуда перейти к смещениям из таблицы внешних ссылок.
Поскольку поиск по каналам невозможен, zathura
использует запутывающий трюк, копируя все входные данные во временный файл, а затем используя этот временный файл, как обычно. Такой «хитрый» трюк порождает ложные надежды и заставляет людей предполагать, что pdf-файлы доступны для потоковой передачи.
Но в любом случае, zathura
действительно ждет EOF перед отображением документа, вам не нужно ничего делать для этого:
(sleep 10; cat file.pdf) | zathura -
# will really show the content of file.pdf after 10 seconds
Проблема в том, что zathura
нет возможности открыть окно только в том случае, если файл в порядке, и выйти с ошибкой, если это не так --он просто останется там, как будто все в порядке:
$ dd if=file.pdf bs=50000 count=1 status=none | zathura -
error: could not open document # its window still hanging around showing nothing
$ echo $?
0 # really?
Таким образом, даже если вы сами перенаправляете вывод во временный файл и запускаете только zathura
, если все в порядке, нет гарантии, что пользователь не увидит черное окно, если zathura
не работает. t нравится вывод по той или иной причине.
Кстати,
man -X man
отобразит справочную страницу в окне X11 с gxditview
, даже если она выглядит прямо из 70-х;-)
И, конечно же, вы всегда можете использовать:
... | xargs xterm -e man
, который, помимо многих других улучшений, позволит вам использовать регулярные выражения при поиске и правильном выделении текста.