Как я могу сделать программу исполняемой отовсюду


76

Что мне делать, если я хочу иметь возможность запускать определенную программу независимо от моего текущего каталога? Должен ли я создать символическую ссылку на программу в /binпапке?


5
нет, вы должны использовать переменную PATH оболочки.
MSS

7
Я думаю, что было бы неплохо создать личную ~/bin/папку, добавить ТО к своему пути и создать символические ссылки в этой папке на все, что вы хотите, чтобы оно выполнялось из любого места.
2010 года

1
Вы также можете установить псевдоним с полным путем к бинарному файлу, который вы хотите выполнить.
datasmurf

Ответы:


53

Если вы просто наберете export PATH=$PATH:</path/to/file>в командной строке, это будет продолжаться только на протяжении сеанса.

Если вы хотите изменить его навсегда, добавьте его export PATH=$PATH:</path/to/file>в файл ~ / .bashrc (просто в конце все в порядке).


11
Спасибо, это работает. Для новичков, как я, не забудьте опустить угловые скобки <>. Как так: $ PATH: / вашего / файла / путь
SaM

4
Также не включайте имя файла программы в путь.
Олли Нимитало,

23

Короткий ответ заключается в том, что для запуска программы, независимо от того, какой у вас каталог, вам нужно иметь каталог программы в вашем пути поиска. Проблема может быть решена путем помещения программы в папку, которая уже находится в этом пути, или путем добавления новой папки в путь - все будет работать. Лучший ответ зависит от:

Является ли эта программа загруженной программой, которую вы сами скомпилировали из исходного кода?

Вполне вероятно, уже будет установлен механизм установки. В папке, с которой вы скомпилировали программу, от имени пользователя root запустите 'make install'

Является ли эта программа загруженной программой, которую вы хотите сделать доступной как часть стандартных программ на компьютере?

Имеет смысл поместить приложение такого типа в стандартную папку. для таких программ довольно часто используют каталоги, такие как / usr / local / bin. Вам понадобится root-доступ для этого.

Это программа, которую вы написали для себя и / или у вас нет специальных привилегий на компьютере.

Создайте папку в вашем домашнем каталоге с именем «bin» и поместите в нее программу. Вам может понадобиться отредактировать скрипт входа в систему, чтобы добавить полный путь к этой папке (например, / usr / home / jeremy / bin)

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


15

Размещение ссылки на файл в /binкаталоге не является лучшим решением по нескольким причинам.

  • Если фактический исполняемый файл находится в месте, которое некоторые пользователи не могут увидеть или выполнить, они считают его плохой ссылкой или недействующей программой.
  • Предполагается, что /binкаталог зарезервирован для программ, необходимых для работы системы (например chmod, mkdirи т. Д.).

Вы можете фактически поместить (установить) исполняемый файл в /usr/bin/или даже /usr/local/bin/. Конечно, вы вручную установили программу в этот момент; ваш дистрибутив не будет отслеживать его так же, как остальные ваши программы - вам придется вручную обновлять его, когда это необходимо, и удалять его вручную, если вы этого хотите. Кроме того, вы должны будете знать, от каких пакетов это зависит (похоже, вы уже используете программу, так что об этом позаботились, но в целом ...).

Если я не настраиваю программу, которую, как я ожидаю, будут использовать другие пользователи, это обычно не то, что я делаю: я создаю каталог bin только для себя в своем домашнем каталоге и редактирую свой профиль оболочки, добавляя его ~/bin/в свою PATHпеременную среды. Мне легче отслеживать программы, которые я установил таким образом, потому что они отделены от остальной системы.


6

Если вы хотите выполнить команду fooв каталоге, в котором находится ваша оболочка, у вас есть два варианта:

  1. Введите ./fooв приглашении оболочки.

  2. Добавьте .каталог ( .это имя для «текущего каталога») в PATHпеременную окружения; как вы это сделаете, зависит от используемой вами оболочки:

    • для оболочек типа Борна (bash, zsh, ksh и т. д.), которые вы пишете (см. эту страницу для получения дополнительной информации):

      export PATH=$PATH:.
      
    • для оболочек типа csh (tcsh, csh), которые вы пишете (см. эту страницу для получения дополнительной информации):

      set path = ( $path .)
      

Обратите внимание, что 2. это угроза безопасности в многопользовательских системах: представьте, что вы находитесь cdв каталоге, /tmpи злонамеренный пользователь создал двоичный файл вредоносного ПО, названный lsтам.


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

1

Возмущение PATHоткрывает вам возможность запуска вредоносных программ по ошибке. Стандарт заключается в том, чтобы установить «локальный» материал /usr/local(см. FHS , который кодифицирует использование Unix: немного устарело, но дает обоснование). /usr/local/binОбычно используется PATHдля всех пользователей.

Мои «локально установленные» программы $HOME/binустановлены стандартным танцем ./configure --prefix=$HOME ..., в сочетании с несколькими (bash) псевдонимами, чтобы выбрать, например, самодельный git поверх системной (не конфликтующие находятся в PATHсамом конце.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.