Обновление диспетчера пакетов Linux Debian $PATH

Проблема здесь в том, что шаблон подстановки имен файлов в командной строке будет расширен оболочкой (, если он соответствует каким-либо именам в текущем каталоге )до вызова утилиты.

Это означает, что фактическая выполняемая команда может быть чем-то вроде

find. ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete

Это можно увидеть, если включить трассировку с помощью set -xв командной строке перед вызовом команды. Используйте set +x, чтобы позже отключить трассировку.

Ваша команда также должна была дать вам одно из сообщений об ошибке unknown optionили paths must precede expressionв зависимости от вашей реализации утилиты find.

Здесь правильно цитировать шаблон из оболочки, как указал Майкл Гомер в комментариях (, он говорит, чтобы избежать *, но цитирование всего шаблона, ИМХО, выглядит красивее и имеет то же самое. эффект):

find. ! -name '*custom.conf' -delete

Таким образом, шаблон передается в findкак есть, и утилита самостоятельно выполняет сопоставление со всеми именами в текущем каталоге.

Я бы также добавил к этому -type f, чтобы мы были уверены, что будем работать только с обычными файлами.:

find. -type f ! -name '*custom.conf' -delete
-1
18.11.2019, 13:44
1 ответ

I 'm currently using dpkg to manage the installation of our software and would like to install to a folder under /usr/bin/ because I think it is convenient to have all software for our system in a separate sub-folder, which is immediately distinguishable from the other software in /usr/bin/.

Это плохая идея, и она противоречит соглашениям Стандарта иерархии файловых систем. По крайней мере, добавьте символические ссылки внутри /usr/local/bin/или/usr/bin/(см. также обновление -альтернативы (1))

Попробуйте, чтобы ваше программное обеспечение управлялось какой-то одной командой (, напримерgit), или, по крайней мере, имело общий каталог/opt/Foo/(с, например. /opt/Foo/bin/для исполняемых файлов и попросите вашего пользователя добавить /opt/Foo/bin/к его/ее$PATH)

I would like to know how to configure debian package manager to update the path to include this new subfolder, e.g. /usr/bin/mysystem/.

Это невозможно, и взломы зависят от оболочки входа в систему вашего пользователя (, а не от /bin/zshи/bin/bash). См. команду chsh (1)и environ (7)и exec (3)или execve (2 )(. используется снарядами ). Пользователь может установить свой интерактивный $PATH, например. в ~/.bashrc(, если его оболочка входа/bin/bash)или ~/.zshrc(, если его оболочка входа/bin/zsh)и т. д....

Узнайте больше о оболочках Unix и как минимум bash (1). Посмотрите исходный код существующих оболочек, например. GNUbashили zsh или es или рыба и другие. Часто это свободное программное обеспечение(или, по крайней мере, открытый исходный код ). Используйте strace (1)в своей собственной оболочке, чтобы понять, какие системные вызовы(см. системные вызовы (2))вызываются ею.

Почитайте какой-нибудь учебник по операционным системам .

Возможно, вдохновитесь ssh -агентом (1). Иногда у меня есть eval $(ssh-agent -s)в некоторых моих сценариях оболочки, например , использующихstartx.

2
28.01.2020, 05:08

Теги

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