Я хотел бы, чтобы пользователи смогли установить мой инструмент командной строки...
https://github.com/occam-proof-assistant/Open-CLI
... глобально и выполненный это от терминала путем ввода open
. Диспетчер пакетов NodeJS, npm
, предоставляет эту услугу, создавая необходимую символьную ссылку, когда Вы устанавливаете пакеты глобально. Таким образом в /usr/bin
каталог, я вижу, что переходящая символьная ссылка была действительно создана:
open -> ../lib/node_modules/occam-open-cli/open.js
Однако это только работает, если я - корень, иначе я добираюсь:
Couldn't get a file descriptor referring to the console
Я знаю, каково это, вид. Если я ввожу openvt
, Я получаю то же сообщение.
Таким образом, я должен смочь удалить псевдоним, или что бы то ни было, который позволяет openvt
быть вызванным с open
. Я думаю, что это - безопасная вещь сделать, так как можно всегда просто отступать к вводу openvt
если Вы хотите.
Однако я затрудняюсь находить способ сделать это. Я предположил, что был некоторый псевдоним, но ввод unalias open
не работал.
Таким образом, какова эта тайна open
команда, псевдоним, символьная ссылка или безотносительно? И как я могу безопасно удалить его и советовать другим делать то же?
Причина это /bin/open
имеет приоритет /usr/bin/open
в Вашей системе, по-видимому, это /bin
прибывает прежде /usr/bin
в Вашем ПУТИ. Для исследования ПУТИ можно работать echo $PATH
. Элементы разделяются с двоеточиями.
Вы получили команду, которую Вы хотели, когда Вы использовали (я принимаю), sudo
работать open
или запустить корневую оболочку, в которой Вы выполнили его, потому что sudo
использует его собственный ПУТЬ, определенный в /etc/sudoers
как secure_path
, который в моей системе является
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Как видете, /usr/bin
прибывает прежде /bin
.
Я думаю, что Ваше открытие нечетно, потому что насколько я знаю, /usr/bin
обычно прибывает прежде /bin
. У Ваших пользователей не может быть той же проблемы как Вы.
Однако для сейфа у Вас могла быть своя программа быть установленными в /usr/local/bin
, который должен всегда прибывать прежде /usr/bin
и /bin
в ПУТИ пользователя так, чтобы программное обеспечение, созданное локально, имело приоритет по другим командам с тем же именем.
Еще более безопасный, как steeldriver предложенный, имеют Ваших пользователей (или Ваш сценарий установки) определяют псевдоним для Вашего инструмента в конфигурационном файле оболочки такой как ~/.bashrc
. Псевдонимы всегда имеют приоритет по другим командам. Вставляя псевдоним Ваш ~/.bashrc
Вы удостоверяетесь, что это только будет известно интерактивным оболочкам и не вмешается в другие программы.
Удаление символьной ссылки могло вызвать проблемы, если программы пытаются выполниться /bin/open
ожидание openvt
, и может быть ненадежным, как указано steeldriver, потому что символьная ссылка могла бы быть воссоздана, когда пакет, который обеспечивает его, обновляется или переустанавливается (т.е. справедливо непредсказуемо).
На самом деле была символьная ссылка open -> openvt
в /bin
каталог. Удаление этой ссылки решило проблему. Однако безусловно лучшее решение, как упомянуто в другом месте, состоит в том, чтобы создать псевдоним на Вашем .bashrc
файл...
Перейдите к своему корневому каталогу:
cd ~
Отредактируйте Ваш .bashrc
(здесь я использовал nano
но там много опций):
nano .bashrc
Поместите следующее где-нибудь (возможно, в ноге):
alias open='/usr/lib/node_modules/occam-open-cli/open.js'
Можно перезагрузить файл путем ввода source .bashrc
и Вы хороши для обхождений без помощи влияния на что-либо еще.