Как установить script для работы в любом месте из командной строки?
Если у меня есть базовый Python script, с ним hashbang и что-то не на месте, так что из терминала в Linux я могу запустить
/path/to/file/MyScript [args]
без выполнения через интерпретатор или любые расширения файлов, и он выполнит программу.
Итак, я бы установил этот script, чтобы просто набрать
MyScript [args]
где-нибудь в системе, и он будет работать? Может ли это быть реализовано для всех пользователей в системе, или оно должно быть переделано для каждого из них? Я просто помещаю script в конкретный каталог или другие вещи необходимы?
Ответы
Ответ 1
Лучшее место для таких вещей - /usr/local/bin
.
Это обычное место для установки пользовательских установленных двоичных файлов и должно быть на ранней стадии PATH
.
Просто скопируйте script там (возможно, используя sudo
), и он должен работать для любого пользователя.
Ответ 2
Просто создайте ~/bin
и поместите export PATH=$PATH:$HOME/bin
в свой bashrc/profile. Не путайтесь с системой, она вас укусит, поверьте мне.
Немногие вещи (относящиеся к вопросу, но не часть ответа):
- Другой способ
export PATH=$HOME/bin:$PATH
НЕ безопасен, поскольку bash будет смотреть в вашу папку ~/bin
для исполняемых файлов, и если их имя совпадает с другими исполняемыми файлами в исходном $PATH
, вы будете удивлены неожиданными/нерабочее выполнение команды.
- Не забывайте
chmod+x
при сохранении script в ~/bin
.
- Помните, что вы помещаете в свою папку
~/bin
, если вы просто что-то проверяете или работаете над недоделанным script, всегда лучше использовать. /$SCRIPT_NAME из вашего CWD
для выполнения script чем положить его под ~/bin
.
Ответ 3
Прохождение создания python script в любом месте:
Сделать python script:
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 знает язык файла через shebang.
Ответ 4
Быстрый ответ на symlink
ваш script в любой каталог, включенный в вашу систему $PATH
.
Длинный ответ описан ниже с помощью прохода по примеру (это то, что я обычно делаю):
a) Создайте script, например. $HOME/Desktop/myscript.py
:
#!/usr/bin/python
print("Hello Pythonista!")
b) Измените разрешение файла script, чтобы сделать его выполнимым:
$ chmod +x myscript.py
c) Добавьте настраиваемый каталог в $PATH
(см. почему в примечаниях ниже), чтобы использовать его для пользовательских скриптов:
$ export PATH="$PATH:$HOME/bin"
d) Создайте символическую ссылку на script следующим образом:
$ ln -s $HOME/Desktop/myscript.py $HOME/bin/hello
Обратите внимание, что hello
(может быть любым) является именем команды, которую вы будете использовать для вызова script.
Примечание:
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!
Ответ 5
Введите echo $PATH
в оболочку. Это каталоги, которые вы искали при вводе command
, поэтому поместите их в один из них.
Изменить: По-видимому, не используйте /usr/bin
, используйте /usr/local/bin
Ответ 6
Помещение script где-то в PATH (например, /usr/local/bin
) является хорошим решением, но это заставляет всех пользователей вашей системы использовать/видеть ваш script.
Добавление псевдонима в /etc/profile
может быть способом сделать то, что вы хотите, чтобы пользователи вашей системы могли отменить это, используя команду unalias
. Добавляемая строка будет:
alias MyScript=/path/to/file/MyScript
Ответ 7
Просто создайте символическую ссылку на свой script в /usr/local/bin/:
sudo ln -s /path/to/your/script.py /usr/local/bin/script
Ответ 8
В соответствии с FHS /usr/local/bin/
является хорошим местом для пользовательских скриптов.
Я предпочитаю сделать их 755
root:root
, после их копирования там.