Добавление нового каталога шрифтов для каждого пользователя

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

pushd / popd , функция csh , скопированная с помощью bash и zsh , представляют собой способ управления стеком. запоминаемых каталогов.

pushd /some/dir

помещает текущий рабочий каталог в стек, а затем изменяет текущий рабочий каталог (и затем печатает / some / dir , за которым следует содержимое этот стек (разделенный пробелами).

popd

печатает содержимое стека (опять же, разделенное пробелом), а затем переходит к верхнему элементу стека и выталкивает его из стека.

(также имейте в виду, что некоторые каталоги будут будут представлены там с их нотацией ~ / x или ~ user / x ).

Итак, если стек в настоящее время имеет / a и / b , текущий каталог - / здесь , и вы работаете:

 pushd /tmp/whatever
 popd

pushd напечатает / tmp / something / here / a / b и popd выведет / здесь / a / b , а не / tmp / something Независимо от того, используется ли подстановка команд или нет. popd не может быть использован для получения пути к предыдущему каталогу, и, как правило, его вывод не может быть обработан постобработкой (см. Массив $ dirstack или $ DIRSTACK некоторые оболочки, хотя для доступа к элементам этого стека каталогов)

Может быть, вы хотите:

pushd "$(mktemp -d)" &&
popd &&
rmdir "$OLDPWD"

Или

cd "$(mktemp -d)" &&
cd - &&
rmdir "$OLDPWD"

Хотя я бы использовал:

tmpdir=$(mktemp -d) || exit
(
  cd "$tmpdir" || exit # in a subshell 
  # do what you have to do in that tmpdir
)
rmdir "$tmpdir"

В любом случае, pushd "$ (mktemp -d ) " не запускает pushd в подоболочке. В противном случае он не смог бы изменить рабочий каталог. Это mktemp , работающий в подоболочке. Поскольку это отдельная команда, она должна выполняться в отдельном процессе. Он записывает свой вывод в канал, а процесс оболочки читает его на другом конце канала.

ksh93 может избежать отдельного процесса, когда команда встроена, но даже там это все еще подоболочка (другая рабочая среда), которая на этот раз эмулируется, а не полагается на отдельную среду, обычно обеспечиваемую разветвлением. Например, в ksh93 , a = 0; echo "$ (a = 1; эхо-тест)"; echo "$ a" , форк не задействован, но все же echo "$ a" выводит 0 .

Здесь, если вы хотите сохранить вывод mktemp в переменной, одновременно с передачей его в pushd с помощью zsh , вы можете:

pushd ${tmpdir::="$(mktemp -d)"}

С другими оболочками типа Борна:

unset tmpdir
pushd "${tmpdir=$(mktemp -d)}"

Или использовать вывод $ (mktemp -d) несколько раз без явного сохранения его в переменной, вы можете использовать zsh анонимные функции:

(){pushd ${1?} && cd - && rmdir $1} "$(mktemp -d)"
3
17.05.2016, 23:57
1 ответ

Конфигурационный файл не подхватывался, поскольку, по-видимому, необходимо иметь числовой префикс для файлов, размещенных в каталогах conf.d, например. ~/.config/fontconfig/conf.d/10-dropbox-fonts.conf работает, а ~/.config/fontconfig/conf.d/dropbox-fonts.conf - нет.

Ведущие 10- в имени файла делают разницу.

4
27.01.2020, 21:22

Теги

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