it-swarm.com.ru

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

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

/path/to/file/MyScript [args]

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

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

MyScript [args]

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

20
jeffbr13

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

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

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

21
agf

Пошаговое руководство по созданию скрипта 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
Eric Leschinski

Просто создайте ~/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.
8
Sudhi

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

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

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

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

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

$ chmod +x myscript.py

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

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

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

$ 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!
6
Aziz Alto

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

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

alias MyScript=/path/to/file/MyScript
4
jfg956

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

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

3
dcpomero

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

Sudo ln -s /path/to/your/script.py /usr/local/bin/script
2
Iurii

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

0
Michał Šrajer