Проблема с $ PATH и исполняемым файлом

8

У меня есть исполняемый файл Unix, расположенный в каталоге, который я создал. Я считаю, что мне нужно поместить этот каталог в свой каталог, $PATHчтобы исполняемый файл unix был исполняемым, но в документации по исходному коду сказано, что мне нужно отредактировать файл конфигурации оболочки, чтобы добавить $home/meme/binего в путь к моей оболочке.

dr.bunsen
источник

Ответы:

10

Если вы хотите иметь возможность выполнить программу, введя ее имя в командной строке, исполняемый файл программы должен находиться в одном из каталогов, перечисленных в PATHпеременной среды. Вы можете увидеть текущее значение переменной следующим образом ( $это ваша подсказка, и ниже приведено примерное значение):

$ echo $PATH
/home/drbunsen/bin:/usr/local/bin:/usr/bin:/bin

У вас есть несколько вариантов; в то время как № 1 и № 2 включают в себя менее продвинутые концепции, я рекомендую № 3, который на практике менее эффективен:

  • Вы можете поместить исполняемый файл в каталог, который уже есть у вас PATH. Например, если /home/drbunsen/binон уже есть у вас PATH, вы можете поместить исполняемый файл туда. Или вы можете вставить исполняемый файл, /usr/local/binесли хотите, чтобы он был доступен для всех пользователей.
  • Вы можете добавить каталог, где находится исполняемый файл в вашем PATH. Отредактируйте файл ~/.profile( ~/означает, что файл находится в вашем домашнем каталоге) (создайте файл, если он не существует). Добавьте такую ​​строку:

    PATH=$PATH:$HOME/meme/bin
    

    (Обратите внимание, что это $HOMEне так $home; Unix обычно чувствителен к регистру. Вы также можете написать ~/meme/bin, ~это синоним, $HOMEкогда он находится в начале пути к файлу.) Изменение вступит в силу при следующем входе в систему. Вы можете ввести это та же строка в терминале, и это повлияет на оболочку, запущенную в этом терминале, и на любую программу, запущенную с него.

  • Подход, который я рекомендую, заключается в том, чтобы сохранить исполняемый файл с другими файлами, которые являются частью программы, в отдельном каталоге, но также не изменять PATH.
    Хранение исполняемого файла $HOME/memeимеет то преимущество, что если вы когда-нибудь захотите удалить или обновить программу, все будет в одном месте. Некоторые программы даже требуют этого, чтобы найти файлы, которые они используют. Не изменяя PATHимеет то преимущество , что при установке и удалении программ меньше работы.
    Чтобы получить лучшее из обоих миров, создайте символическую ссылку в каталоге на вашем компьютере PATH, указывая на фактический исполняемый файл. Из командной строки выполните команду, подобную этой:

    cd ~/bin
    ln -s ../meme/bin/* .
    

    Это при условии, что ~/binэто уже на вашем PATH; если это не так, добавьте его, ~/.profileкак указано выше. Выберите другое место, если хотите. Теперь сделать программы доступными - это вопрос создания символических ссылок; сделать их недоступными - это вопрос удаления символических ссылок; и вы можете легко отслеживать, какие программы вы установили вручную и где они живут, посмотрев на символические ссылки.

Жиль "ТАК - перестань быть злым"
источник
Жиль, вау спасибо большое за подробное объяснение. Я действительно ценю твою помощь. Спасибо, что нашли время, чтобы ответить на мой вопрос подробно и на уровне, который сделал все кристально ясным.
др.бунсен
Еще одна вещь, которую я заметил, это то, что в каталоге home / meme / нет каталога / bin. Нужно ли создавать bin, чтобы я мог сделать здесь символическую ссылку на мой PATH? Спасибо.
Бунзен
@ dr.bunsen ~/binявляется распространенным местоположением, и некоторые дистрибутивы создают его автоматически. Если у вас нет, вам придется создать его и добавить его PATHвручную. Место ~/binэто просто соглашение, вы можете выбрать другое имя, если хотите.
Жиль "ТАК - перестань быть злым"
Команда подстановочных знаков не работает, потому что ln интерпретирует последний элемент в расширении как каталог: «Использование: ln [OPTION] ... [-T] TARGET LINK_NAME (1-я форма) или: ln [OPTION] ... TARGET ( 2-я форма) или: ln [OPTION] ... TARGET ... DIRECTORY (3-я форма) или: ln [OPTION] ... -t DIRECTORY TARGET ... (4-я форма) «Чтобы решить эту проблему, я добавил» - т ./ "
adam.r
1
@ adam.r Я написал ln -s ../meme/bin/* ., нет ln -s ../meme/bin/*. Похоже, вы пропустили один символ при копировании команды.
Жиль "ТАК - перестань быть злым"