Как установить скрипт для запуска в любом месте из командной строки? - PullRequest
20 голосов
/ 06 августа 2011

Если у меня есть базовый скрипт на Python, с его hashbang и чем-то еще, чтобы из терминала в Linux я мог запустить

/path/to/file/MyScript [args]

без выполнения через интерпретатор или любые расширения файлов,и он запустит программу.

Итак, я бы установил этот скрипт, чтобы я мог просто набрать

MyScript [args]

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

Ответы [ 8 ]

21 голосов
/ 06 августа 2011

Лучшее место для таких вещей: /usr/local/bin.

Это обычное место для установки пользовательских двоичных файлов, и оно должно быть в начале PATH.

Просто скопируйте туда скрипт (возможно, используя sudo), и он должен работать для любого пользователя.

9 голосов
/ 14 октября 2014

Пошаговое руководство по созданию скрипта Python в любом месте:

Создать скрипт на python:

cd /home/el/bin
touch stuff.py
chmod +x stuff.py

Узнайте, где находится ваш питон:

which python
/usr/bin/python

Вставьте туда этот код:

#!/usr/bin/python
print "hi"

Запустите в нем тот же каталог:

python stuff.py

Перейдите в каталог, и он недоступен:

cd ..
stuff.py

-bash: stuff.py: command not found

Не найдено! Как мы и ожидаем, добавьте путь к файлу python в $ PATH

vi ~/.bashrc

Добавить файл:

export PATH=$PATH:/home/el/bin

Сохраните его, повторно примените .bashrc и повторите попытку

source ~/.bashrc

Попробуйте еще раз:

cd /home/el
stuff.py

Печать:

hi

Хитрость в том, что оболочка bash знает язык файла через шебанг.

8 голосов
/ 06 августа 2011

Просто создайте ~/bin и поместите export PATH=$PATH:$HOME/bin в ваш bashrc / профиль. Не связывайтесь с системой, она укусит вас назад, поверьте мне.

Еще несколько вещей (имеющих отношение к вопросу, но не часть ответа):

  1. Другой способ export PATH=$HOME/bin:$PATH НЕ безопасен, поскольку bash будет искать в вашей папке ~/bin исполняемые файлы, и если их имена совпадают с другими исполняемыми файлами в вашем исходном $PATH, вы будете удивлены неожиданным / нерабочим Выполнение команды.
  2. Не забудьте chmod+x при сохранении скрипта в ~/bin.
  3. Помните о том, что вы помещаете в папку ~/bin, если вы просто что-то тестируете или работаете над незаконченным сценарием, всегда лучше использовать ./$SCRIPT_NAME из вашего CWD для выполнения сценария, чем помещать его под ~/bin.
7 голосов
/ 04 января 2015

Быстрый ответ - symlink ваш скрипт для любого каталога, включенного в вашу систему $PATH.

Длинный ответ описан ниже с помощью примера (это то, что я обычно делаю):

а) Создайте скрипт, например. $HOME/Desktop/myscript.py

#!/usr/bin/python
print("Hello Pythonista!")

b) Измените разрешение файла скрипта, чтобы сделать его исполняемым:

$ chmod +x myscript.py

c) Добавьте пользовательский каталог в $PATH (см. Почему в примечаниях ниже), чтобы использовать его для сценариев пользователя:

$ export PATH="$PATH:$HOME/bin"

d) Создайте символическую ссылку на скрипт следующим образом:

$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello

Обратите внимание, что hello (может быть любым) - это имя команды, которую вы будете использовать для вызова вашего скрипта.

Примечание:

i) Причина использования $HOME/bin вместо /usr/local/bin состоит в том, чтобы отделить локальные сценарии от сценариев других пользователей (если вы хотите) и других установленных компонентов.

ii) Чтобы создать символическую ссылку, вы должны использовать полный правильный путь, то есть

$HOME/bin ХОРОШО ~/bin НЕ ХОРОШО!

Вот полный пример:

 $ pwd
 ~/Desktop
 $ cat > myscript.py << EOF
 > #!/usr/bin/python
 > print("Hello Pythonista!")
 > EOF
 $ export PATH="$PATH:$HOME/bin"
 $ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
 $ chmod +x myscript.py
 $ hello
Hello Pythonista!
4 голосов
/ 06 августа 2011

Размещение сценария где-нибудь в переменной PATH (например, /usr/local/bin) является хорошим решением, но это заставляет всех пользователей вашей системы использовать / видеть ваш сценарий.

Добавление псевдонима в /etc/profile может быть способом сделать то, что вы хотите, позволяя пользователям вашей системы отменить это с помощью команды unalias. Добавляемая строка будет выглядеть так:

alias MyScript=/path/to/file/MyScript
3 голосов
/ 06 августа 2011

Тип echo $PATH в оболочке. Это каталоги, которые ищутся при вводе command, поэтому поместите его в один из них.

Редактировать: Очевидно, не используйте /usr/bin, используйте /usr/local/bin

2 голосов
/ 28 сентября 2016

Просто создайте символическую ссылку на ваш скрипт в / usr / local / bin /:

sudo ln -s /path/to/your/script.py /usr/local/bin/script
0 голосов
/ 06 августа 2011

Согласно FHS , /usr/local/bin/ является хорошим местом для пользовательских сценариев. Я предпочитаю делать их 755 root:root, после копирования их туда.

...