OS X - создайте личный каталог bin (~ / bin) и запускайте сценарии без указания их полного пути

19

Итак, я пытаюсь создать личный binкаталог в моей домашней папке. Я создал следующую папку:

/Users/thi/bin

Я помещаю свои скрипты в эту папку, но если я печатаю в Терминале:

myScript

Это не работает.

Мне сказали, что я должен экспортировать этот путь в корзину, что-то связанное с этим echo $PATH, но я не знаю, как это сделать.

Ти Г.
источник
см. также в конце apple.stackexchange.com/a/98626
nohillside

Ответы:

20

Вам необходимо добавить следующее в файл ~/.profile:

export PATH=/Users/thi/bin:$PATH

потом source ~/.profile

Обратите внимание, что вам может понадобиться создать этот файл, и, поскольку он начинается с, .он может не отображаться в Finder для редактирования через приложение, такое как текстовый редактор. Чтобы просмотреть все файлы, включая скрытые, используйте:

ls -la ~/
tfjgeorge
источник
Если я добавлю экспорт PATH = / Users / thi / bin: $ PATH в мой файл .bashrc, это сработает? Это правильно?
Thi G.
12
Лучше использовать $HOME/binвместо /Users/thi/bin. После этого вы сможете скопировать свои настройки на другой компьютер, где ваше имя пользователя может отличаться.
LHF
Если я наберу в терминале: PATH = $ HOME / bin: $ PATH, а затем введите: export PATH. Будет ли это сделать трюк?
Ти Дж.
1
Если вы сделаете это, он изменит настройки сейчас, но не при будущих загрузках. Чтобы изменить путь таким образом, чтобы он сохранился после перезагрузки, вам нужно включить эти команды в ваш .profileфайл.
Даниил
1
Отлично, спасибо всем за ответы. Я добавил export PATH=$HOME/bin:$PATHв мой $HOME/.bash_profile.
Thi G.
10

Если вы используете bash, добавьте следующую строку ~/.bash_profile:

PATH=~/bin:$PATH

PATHпомечен для экспорта по умолчанию, поэтому вам не нужно использовать export.

Если оба ~/.bash_profileи ~/.profileсуществуют, bash читает только ~/.bash_profileтогда, когда он вызывается как интерактивная оболочка входа в систему. ~/.profileтакже используется другими оболочками, которые могут не понимать те же параметры конфигурации, что и bash.

Терминал и iTerm 2 по умолчанию открывают новые оболочки в качестве оболочек для входа. Когда bash вызывается как интерактивная оболочка входа в систему, она читает, ~/.bash_profileно не читает ~/.bashrc. Эмуляторы терминала на других платформах часто открывают новые оболочки как оболочки без входа в систему, поэтому, например, bash читает, ~/.bashrcно не читает ~/.bash_profile. Пользователи OS X часто используют ~/.bash_profileв качестве персонального файла конфигурации, соответствующего ~/.bashrcна других платформах, но также распространено исходить ~/.bashrcиз ~/.bash_profileили сказать Терминалу или iTerm 2, чтобы открывать новые оболочки как оболочки без входа в систему.

Вы также можете изменить путь более глобально в /etc/pathsили /etc/launchd.conf, но во многих контекстах путь по-прежнему будет по умолчанию /usr/bin:/bin:/usr/sbin:/sbin. И мне действительно нужно было изменить путь в оболочках и текстовых редакторах.

LRI
источник
Отлично, спасибо за ответ. Я добавил export PATH=$HOME/bin:$PATHв мой $HOME/.bash_profile.
Thi G.
Вам не нужен экспорт , и оба ~(когда $HOMEони не заключены в кавычки), и они раскрываются перед назначением переменной как при использовании экспорта, так и при обычном назначении.
Lri
Лаури Ранта, что ты предпочитаешь лично .bash_profileили .profile? Или у вас есть .bashrcв вашем домашнем каталоге?
Thi G.
Раньше я использовал только .bash_profile, но теперь я использую .bashrc в качестве основного файла конфигурации, а мой .bash_profile просто содержит . ~/.bashrc. Новые оболочки открываются как оболочки без логина в режиме оболочки в emacs и в tmux. Я бы не использовал .profile в качестве основного файла конфигурации, потому что он также читается другими оболочками, такими как ksh.
Lri
3

Обычно вы добавляете дополнительные пути после, $PATHкак, PATH=$PATH:/$HOME/binпотому что, если вы не хотите заменять другой исполняемый файл с тем же именем, которое может быть /bin, и т. Д.

Ник Маккензи
источник
4
Можно легко утверждать, что вы положили $HOME/binв начале именно по этой причине. Но главное в том, что порядок каталогов $PATHимеет значение, и что оболочка выберет первую соответствующую команду. Спасибо за указание на это.
nohillside