Установка шрифтов CMU на NixOS

Подстановка команды / процесса POSIX


_log()( x=0
    while  [ -e "${TMPDIR:=/tmp}/$$.$((x+=1))" ]
    do     continue; done        &&
    mkfifo -- "$TMPDIR/$$.$x"    &&
    printf %s\\n "$TMPDIR/$$.$x" || exit
    exec >&- >/dev/null
    {  rm -- "$TMPDIR/$$.$x"
       logger --priority user."$1" --tag "${0##*/}"
    }  <"$TMPDIR/$$.$x" &
)   <&- </dev/null

Вы можете использовать это примерно так:

exec >"$(_log notice)" 2>"$(_log error)"

Вот версия, в которой используется mktemp команда:

_log()( p=
    mkfifo "${p:=$(mktemp -u)}"    &&
    printf %s "$p"                 &&
    exec  <&- >&- <>/dev/null >&0  &&
    {   rm "$p"
        logger --priority user."$1" --tag "${0##*/}"
    }   <"$p" &
)

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

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

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


Другой способ - обернуть его. Это можно сделать из сценария.

x=${x##*[!0-9]*}
_log(){ 
    logger --priority user."$1" --tag "${0##*/}"
}   2>/dev/null >&2

cd ../"$PPID.$x" 2>/dev/null &&
trap 'rm -rf -- "${TMPDIR:-/tmp}/$PPID.$x"' 0 || 
{   until cd -- "${TMPDIR:=/tmp}/$$.$x"
    do    mkdir -- "$TMPDIR/$$.$((x+=1))"
    done  && 
    x=$x "$0" "$@" | _log notice
    exit
}   2>&1 | _log error

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

3
01.03.2018, 13:01
1 ответ

En NixOS, las fuentes no se pueden instalar a través de nix-envporque para encontrar las fuentes es necesario crear una especie de base de datos. Eso requiere efectos secundarios -, pero los paquetes de Nix son funciones puras. En general, puede pensar que el código de efecto lateral -es manejado por nixos-rebuild; por lo tanto, deberá usarconfiguration.nix:

fonts.fonts = [ pkgs.cm_unicode ];

Puede ver mi video sobre las fuentes de NixOS para ver una demostración. Perdón por mi voz de robot -.

Para obtener información específica sobre látex -, consultehttps://nixos.org/nixpkgs/manual/#sec-language-texlive

3
27.01.2020, 21:21

Теги

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