Как сделать сценарий оболочки глобальным?


84

У меня Mac OS 10.6, и я пытаюсь кое-что узнать о сценариях оболочки. Я понимаю, как сохранить сценарий оболочки и сделать его исполняемым, но мне интересно, что я могу сделать или где я могу сохранить файл, чтобы сделать его глобальным (то есть доступным независимо от того, в какой папке я нахожусь).

Например, если я сохраню файл .sh в каталоге / Users / username / и сделаю его исполняемым, я могу выполнить этот сценарий только в этом конкретном каталоге. Например, если я перейду в / Users / username / Downloads, я не смогу выполнить скрипт.

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


1
PATHСначала прочтите о переменной среды, а затем обновите вопрос.
S.Lott

Ответы:



44

Традиционно такие сценарии либо входят ~/bin(то есть: каталог bin в вашем домашнем каталоге), либо /usr/local/bin/первое означает, что сценарий будет работать только для вас, второе - для сценариев, которые вы хотите, чтобы кто-либо в системе мог запускать.

Если вы вставите его ~/bin, вам может потребоваться добавить его в переменную среды PATH. /usr/local/binуже должен быть на пути.


30

Есть два способа сделать это -

  1. Поместите свой скрипт в usr / local / bin и убедитесь, что он исполняемый (chmod + x my_script) (это уже установлено в пути, вы можете проверить, выполнив echo $ PATH)
  2. Создайте в домашнем каталоге папку с именем bin. (Для ваших личных скриптов)
    • cd ~ (переносит вас в ваш домашний каталог)
    • mkdir bin (создать папку bin)
    • vim .bash_profile (для установки переменной среды пути)
    • экспорт PATH = ~ / bin: $ PATH (нажмите i, затем добавьте эту строку, затем выполните esc и введите: wq)
    • Теперь вы можете просто ввести имя своего скрипта и запустить его из любого места.

** ПРИМЕЧАНИЕ . Если вы хотите запустить сценарий с сокращенной командой, а не вводить полное имя файла, добавьте следующее в свой .bash_profile:
alias myscript='my_script.sh'
Затем вы можете запустить сценарий, просто набрав myscript. (вы можете использовать любой псевдоним, который хотите)


4

В операционной системе Mac

  • Откройте файл bash ~ / .bashrc.
  • добавьте путь к вашему скрипту в ваш файл bashrc, используя export PATH = "$ PATH: /Users/sher.mohammad/Office/practice/practiceShell"
  • Откройте файл ~. / Bash_profile и добавьте [[-s ~ / .bashrc]] && source ~ / .bashrc
  • открыть новое окно терминала Теперь всякий раз, когда вы откроете терминал, ваш скрипт будет загружен

почему бы просто не вставить его прямо внутрь .bash_profile? Это намного проще (и этот исходный файл .bashrc никогда не работал у меня).
szeitlin

Я исследовал и обнаружил, что bash_profile выполняется при входе в систему, bashrc используется для оболочек без входа, OS X по умолчанию, например, оболочки входа и загрузки bash_profile, поэтому добавление в bash_profile будет работать нормально, и если вы напишете в bashrc, вы добавите [[- s ~ / .bashrc]] && source ~ / .bashrc в bash_profile, чтобы загрузить bashrc при запуске bash_profile во время входа в систему
Шер Мохаммад

4

Это очень просто, если вы знакомы с вашим файлом bashrc! Это будет полностью использовать только ваш файл .bashrc и займет 2 секунды.

(Я использую Arch Linux Manjaro, поэтому использую .bashrc, расположенный в моем домашнем каталоге)

Код, который нужно поместить в ваш .bashrc файл:

# Simple bashrc method to launch anything in terminal from any directory

YOURCOMMAND () {
  cd /path/to/directory/containing/your/script/ && ./YOURSCRIPT
}

Как видите, сначала вы используете простую команду 'cd' и указываете ей каталог расположения скриптов, затем используете '&&', чтобы вы могли выполнить следующую команду сразу после, и, наконец, открываете свой скрипт так же, как вы бы обычно! Очень просто и сохраняется прямо в вашем .bash файле! :)

Надеюсь, я кому-то помог!

С уважением,

Анонимный X


это здорово ... и это позволяет моему zsh автозаполнение!
Милан

А если у вас другой сценарий?
Пауло Серджио Шлогль

2

При использовании оболочки bash напишите этот сценарий как функцию, а затем поместите его в .bashrc или укажите файл, содержащий эту функцию, с помощью "source file_name"

Теперь выполните сценарий путем вызова функции в оболочке.


1

Либо сохранение его /usr/bin(или любой другой каталог, присутствующий в PATH), либо редактирование PATHдля включения каталога, в котором вы его сохранили, в основном заставит его работать в любом каталоге.


7
/usr/binможно полностью очистить и заменить во время обновления ОС, в результате чего ваш скрипт таинственным образом исчезнет. /usr/local/binдля этой цели, как упоминал Брайан Окли. См. Также Стандарт иерархии файловой системы
Стивен П.

0

из рабочего каталога 'script.sh' «mv [script.sh] / usr / local / bin» (не проверено, но, похоже, это наименее сложный способ ИМО.)


1
Возможно, вам понадобится sudo mv script.sh /usr/local/bin, поскольку этот каталог не доступен для записи без повышения привилегий.
Перетте

-2

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

Вы также можете поместить его в любой другой каталог, который находится в $PATHпеременной среды, хотя он будет работать только для тех пользователей, у которых есть этот каталог в этой переменной.

Вы можете узнать значение $PATH, набрав echo $PATHв командной строке. Каталоги разделены : .


9
Я собираюсь проголосовать против, потому что / usr / bin - неправильный ответ. / usr / local / bin специально разработан для «локальных» скриптов (т.е. тех, которые вы создаете, а не тех, которые поставляются с системой).
Брайан Окли,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.