Автор оригинала: anil chaudhary.
(https://unsplash.com/@hannahjoshua)
TLDR:
- Строки Shebangs добавляются поверх файлов командной строки. Строка указывает системе, какой исполняемый файл должен быть использован для запуска текущего файла. Линия shebang выглядит примерно так:
#!/usr/bin/env node
Приведенная выше строка означает: Выполнить с помощью интерпретатора узла, используя путь поиска программы, чтобы найти его.
- Система ищет командные файлы или исполняемые файлы во всех каталогах, на которые указывает переменная окружения
PATH
. Вы также можете запускать различные исполняемые файлы сценариев, используя правильный синтаксис shebang. - Таким образом , чтобы иметь действительную команду, в основном вам нужно иметь исполняемый файл в одном из каталогов
PATH
и исправить shebang для правильных исполняемых файлов.
Вы когда-нибудь задумывались, как вообще работают пользовательские команды? – Я задавался этим вопросом сегодня и взял на себя задачу покопаться в нем побольше.
Я постараюсь сделать его простым, потому что кто не любит простоту.
Прежде чем мы начнем, давайте определим нашу конечную цель. Мы хотим в основном запустить скрипт из командной строки, используя только их имя !!
Допустим, у нас есть файл с именем somework.js
.
Предположим, что единственным содержимым файла является:
console.log("Hello World")
Как вы будете работать в узле js ?
Вы запустите его примерно так: node somework.js
Теперь, если я хочу запустить этот скрипт без команды node
. Что-то вроде этого:
somework
Он должен работать так же, как и с командой node. Он должен вывести Hello World
в терминале.
Давайте посмотрим на различные элементы, задействованные при выполнении команды.
Шебанг
Я работаю в основном в экосистеме javascript , поэтому у меня есть достаточно хорошее представление о том, как работают команды. Я знал, что достаточно поместить поле bin
в package.json
и указать на ваш скрипт( Read more ).
Я никогда не возвращался, чтобы выяснить, что происходит после этого.
На этот раз мне больше понравилось такое отношение.
Я начал смотреть на один из файлов bin
в node_modules
Одна вещь, которую я мог видеть, была специальная строка в верхней части файла, которая выглядела примерно так.
#!/usr/bin/env node
Если у вас есть приложение nodejs, продолжайте и проверьте любой файл в node_modules/bin
. Вы должны найти подобную линию.
Я чувствовал , что это интересно. Я снова поискал. и приземлился на эту ссылку . Они называются shebang | hashbang | pound bang | hash-pling
Оказалось, что шебанг-это интерпретатор-директива
О-о-о-о!! 😲 😲
Но что такое интерпретатор-директива ? . Проще говоря, это просто способ сказать системе, как реагировать на вводимые вами команды ( какой исполняемый файл нужно запустить ?).
Простыми словами, если есть такая строка:
#!/usr/bin/env node
Это значит: Выполните файл с помощью интерпретатора узла, используя путь поиска программы, чтобы найти его.
Мы знаем, что хотим запустить файл nodejs, поэтому мы должны добавить строку в верхнюю часть нашего файла
Содержимое файла стало бы:
#!/usr/bin/env node console.log("Hello World")
Дайте исполняемому файлу разрешение.
chmod +x somework.js
Этого будет достаточно ?
Помните, что есть еще одна часть, которая
Используя программу поиска пути, чтобы найти его.
Что это значит? .. Давайте посмотрим на это в следующем разделе .
ПУТЬ
Нам нужно выяснить, как система ищет исполняемые файлы. И снова я искал его. а потом наткнулся на эту ссылку .
Примечание: Это только последние ссылки. На самом деле мне потребовалось гораздо больше времени, чтобы добраться до этих звеньев.
А теперь вернемся к делу
Как говорится в определении в википедии:
PATH-это переменная окружения в Unix-подобных операционных системах, DOS, OS/2 и Microsoft Windows, указывающая набор каталогов, в которых находятся исполняемые программы
Хм , здорово !! Но как мы видим, что такое значение PATH
прямо сейчас в моей системе ?
RUN (Должен работать на терминалах на базе Linux)
echo $PATH
Примечание: Для ОС Windows проверьте следующую ссылку
Вы получите что-то вроде этого в качестве вывода:
/Users/wolfgupta/.nvm/versions/node/v14.15.3/bin:/Applications/mongo/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Library/Apple/usr/bin:$GOPATH/bin:$GOROOT/bin:/Users/wolfgupta/Library/Android/sdk/emulator:/Users/wolfgupta/Library/Android/sdk/tools:/Users/wolfgupta/Library/Android/sdk/tools/bin:/Users/wolfgupta/Library/Android/sdk/platform-tools:/usr/local/mysql/bin
Это набор каталогов, в которых ищутся файлы с тем же именем, что и команда. Файлы(somework.js) может содержать логику.
Как мы обновляем ПУТЬ ?
Это должен быть очень простой поиск в Google. Я оставлю эту задачу вам, ребята.
Вот некоторые из ссылок, которые вы можете найти полезными.
Вот некоторые из ссылок, которые вы можете найти полезными.
Вот некоторые из ссылок, которые вы можете найти полезными.
Если вы используете mac os/linux . Изменение ~/.bashrc , ~/.zshrc e.t.c должно сделать.
Если вы действительно хотите проверить другие общие определения команд node js, которые вы используете ежедневно.
Бежать
cd /usr/local/bin ls
вы можете сделать vi
для любого из перечисленных файлов, чтобы лучше понять команды
Как преобразовать узел somework.js
чтобы немного поработать
. сначала мы переименуем файл в just some work
без расширения, а затем переместим его в /usr/local/bin
Бежать
mv ./somework /usr/local/bin
Теперь просто закройте текущую вкладку терминала и откройте новую вкладку.
Бежать
somework
Вы должны увидеть свой прекрасный Привет мир
напечатанный на терминале.
Это о node, как насчет того, если вы являетесь python
парнем и хотите написать свой скрипт на python. Вы очень хорошо можете сделать это с помощью ее челки
Измените содержимое файла в some work
file at/usr/local/bin на
#!/usr/bin/env python print("Hello World!")
Примечание: Убедитесь, что на вашем компьютере установлен python
.
В этом файле вы можете написать любой скрипт python и будете работать так, как была запущена версия файла node js.
Есть так много других деталей, о которых я здесь не упоминаю. Но да, вы определенно можете использовать эту статью в качестве хорошей отправной точки для создания утилит командной строки для вашего программного обеспечения.
Наконец, желаю всем вам отличного нового 2021 года. Пусть мир станет лучше для всех нас в ближайшие годы.
Анил Чаудхари