Как git может запускать C-скрипты в текущем каталоге как команду на терминале? - PullRequest
0 голосов
/ 09 мая 2018

Я недавно изучал bash и shell и пытался выяснить, как git может создать терминальную команду, которая запускает сценарии C в текущем каталоге, например, git init, git push / pull и т. Д.

Я пытался смоделировать его на python, создавая исполняемый скрипт python в моем домашнем каталоге,

#!/usr/bin/env python
import os
print("current_dir: ",os.getcwd()) #prints /Users/usr/folder/script.py

Затем я создаю файл .command, который вызывает скрипт python

cd
cd FOLDER/
python3 SCRIPT.py

и редактирование профиля bash для экспорта переменной для запуска файла .command.

export mycommand=/Users/urn/folder/command.command

Хотя это даже не близко к тому, как git достигает своей командной строки. Например, когда я запускаю мой скрипт, на самом деле это не терминальная команда, это просто переменная окружения, поэтому $.

$mycommand

Во-вторых, это идет в каталог файла python и запускает скрипт с этим каталогом, поэтому выходные данные всегда будут одинаковыми

/Users/usr/folder/script.py

Хотя в git он запускает файл в текущем каталоге. Поэтому оператор print будет меняться в зависимости от каталога терминала.

Как я могу создать свою собственную «терминальную команду», такую ​​как git init, для запуска моего скрипта python в любом каталоге, в котором я нахожусь. PS, я на Mac.

Любая помощь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 09 мая 2018

Похоже, вам не хватает хотя бы двух основных понятий:

  • Путь поиска : когда вы запускаете команду, которая не является функцией оболочки или не является встроенной, и которая имеет неквалифицированное имя (имя без символов /), оболочка выполняет поиск список из нуля или более каталогов для соответствующего исполняемого файла. Этот список каталогов является «путем» и хранится в переменной окружения PATH. Вы можете изменить его, если хотите. Вот как оболочка находит программу git, когда вы не указываете путь к ней.

  • Исполняемые скрипты : Python, shell, Perl, и т. Д. . Программы, которые должны запускаться через интерпретатор, можно сделать исполняемыми только по имени, включив соответствующую строку shebang в качестве самой первой строки и назначив режим выполнения. Фактически, вы включаете в свой пример программы на Python соответствующую строку shebang, но, похоже, вы не понимаете ее значения, потому что вы явно запускаете скрипт с помощью команды python3. Строка shebang - это просто еще один комментарий к Python, но он важен для системы.

Похоже, что вам, вероятно, также не хватает некоторых других концепций, таких как тот факт, что ваш скрипт не обязательно должен находиться в текущем рабочем каталоге, чтобы вы могли запускать его через панель запуска python3, несмотря на путь. Просто укажите его полный путь. В качестве альтернативы, у Python есть свой вариант пути PYTHONPATH, по которому он может находить модули и пакеты. Однако это альтернативы - первых двух пунктов достаточно для достижения вашей очевидной цели. В частности,

  1. Сохраните строку shebang в вашем скрипте, хотя ваш python по умолчанию, вероятно, v2.7, поэтому, если вы действительно хотите запустить его специально через python3, тогда измените строку shebang так:

    #!/usr/bin/env python3
    
  2. Убедитесь, что файл имеет исполняемый режим. Например,

    chmod 0755 /Users/urn/bin/SCRIPT.py
    

    Тогда вы сможете выполнить скрипт из любого места по его полному пути.

  3. Чтобы получить к нему доступ из любого места через его простое имя, убедитесь, что каталог, содержащий его, находится на вашем пути. Для этой цели целесообразно выбрать подходящий каталог, например /usr/local/bin или /Users/urn/bin (может потребоваться сначала создать каталог). Что бы вы ни выбрали, убедитесь, что этот каталог находится в вашем PATH. Например, отредактируйте /Users/urn/.bash_profile, создав его при необходимости, и убедитесь, что он содержит (скажем) команды

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

    Это вступит в силу в новых Окнах терминала, которые вы открываете позже, но не автоматически в любых, которые уже открыты. В этих окнах вы сможете запускать скрипт из любого места, используя его простое имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...