`man -H `всегда открывает -несуществующий файл в браузере

Документация по команде sbatchсодержит полный список разрешенных замен символов :на странице руководства sbatch

filename pattern sbatch allows for a filename pattern to contain one or more replacement symbols, which are a percent sign "%" followed by a letter (e.g. %j).

\\ Do not process any of the replacement symbols.

%% The character "%".

%A Job array's master job allocation number.

%a Job array ID (index) number.

%J jobid.stepid of the running job. (e.g. "128.0")

%j jobid of the running job.

%N short hostname. This will create a separate IO file per node.

%n Node identifier relative to current job (e.g. "0" is the first node of the running job) This will create a separate IO file per node.

%s stepid of the running job.

%t task identifier (rank) relative to current job. This will create a separate IO file per task.

%u User name.

%x Job name.

A number placed between the percent character and format specifier may be used to zero-pad the result in the IO filename. This number is ignored if the format specifier corresponds to non-numeric data (%N for example).

Some examples of how the format string may be used for a 4 task job step with a Job ID of 128 and step id of 0 are included below:

job%J.out

job128.0.out

job%4j.out

job0128.out

job%j-%2t.out

job128-00.out, job128-01.out,...

4
27.04.2021, 17:55
1 ответ

По крайней мере, в моей системе (Arch Linux, man -db 2.9.4, Firefox 88.0 ), manсоздает временный каталог в /tmp/, записывает в него сгенерированный файл HTML, вызывает браузер с файлом HTML в качестве аргумента и, когда процесс браузера завершается, удаляет временный каталог (для очистки, я думаю ).

Хотя это не создает проблем в некоторых браузерах, (например. Lynx ), с другими может возникнуть состояние гонки (Firefox, в моем случае; Я также кратко протестировал Chromium и получил аналогичные результаты ). Насколько я вижу, файл HTML открывается правильно, если manоткрывает новое окно браузера. С другой стороны, если справочная страница открывается как новая вкладка в существующем окне браузера, процесс браузера, запущенный с помощью man, возвращается раньше, и файл уже отсутствует, когда другой процесс браузера пытается его прочитать.

Я не вижу manопции, направленной на предотвращение удаления временного HTML-файла. Но, учитывая, что аргумент -H/--htmlопции (или, что то же самое, значение переменной окружения BROWSER)может быть командой оболочки, быстрый обходной путь может быть:

BROWSER='firefox %s; sleep 5' man -H 3 free

(sleepдает Firefox время для загрузки страницы перед удалением файла; перезарядить его, конечно же, будет невозможно ).

Или, если вы хотите реализовать собственный механизм удаления временных файлов HTML:

BROWSER='cp %s /path/to/file.html; firefox /path/to/file.html' man -H 3 free

(При этом игнорируются другие активы, которые могут быть сгенерированы вместе с основным .htmlфайлом, который поэтому может отображаться неправильно ).

Или,если у вас все в порядке с сохранением временных каталогов (, например. вы не генерируете их много, ваш /tmpнестабилен, и ваша система достаточно регулярно перезагружается):

BROWSER='firefox %s && false' man -H 3 free

(Временный каталог не удаляется, когда команда браузера возвращает ошибку man; как недостаток, выводится сообщение об ошибке, потому что manдумает, что браузер не может быть открыт ).

Также обратите внимание, что переменная окружения TMPможет использоваться для указания manместа создания временных данных.

Наконец, выбранный обходной путь можно удобно преобразовать в псевдоним или функцию по аналогии с:

alias man='BROWSER="${BROWSER:-firefox} %s && false" man'

См. также альтернативные способы просмотра справочных страниц в формате HTML:

8
28.04.2021, 22:50

Теги

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