С чего начать создание приложений CLI? [закрыто]

8

После использования Linux в течение месяца или двух, я знаю, что я делаю сейчас.

При создании программ на любом языке я, очевидно, использовал такой код:

$ python test.py

И поэтому, если бы я хотел test.pyпрочитать данный файл, мне пришлось бы использовать:

$ python test.py something.file

Что я хотел бы сделать сейчас, это попытаться создать приложение командной строки, чтобы я мог использовать

$ myapp something.file

Программа, как pythonв $ python test.pyили nanoв$ nano program.pl

Но где же мне начать создавать подобные приложения? Немного веб-траления никуда меня не привело.

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

Я полностью открыт, если есть больше чем один способ, я действительно не возражаю против того, какой язык (оправдание изучать другой!) Или что-то еще.

ACarter
источник
3
Вы хотите изучать программирование на Unix C или просто хотите иметь возможность запускать скрипты на Python без указания pythonчасти?
jw013
@ jw013 Я хочу изучать программирование на Unix C. (Хотя мне было бы интересно узнать, как можно запускать скрипты на Python без python.)
ACarter
4
Вероятно, вам следует исправить свой вопрос :) Приложения CLI могут быть написаны на любом языке, в котором есть Unix-компилятор или интерпретатор, поэтому, если вас интересует только C, так и скажите. Программирование на Unix C на самом деле состоит из двух частей - части Unix и части C. Как это, "Как я изучаю программирование на Unix C?" вероятно будет закрыт из-за того, что он слишком общий, и на этом сайте, вероятно, есть дубликаты. «Как я изучаю C-программирование» также слишком общее и, возможно, не по теме. Это конечно будет закрыто на SO.
jw013
@ jw013 Что мне действительно нужно, так это совет типа «CLI-приложения могут быть написаны на любом языке с компилятором или интерпретатором Unix», так что спасибо.
ACarter
1
Ах хорошо. Когда вы пытаетесь проникнуть в среду Unix, всегда есть немного крутой начальный уклон в кривой обучения, но как только вы преодолеете это, я уверен, вы обнаружите, что усилия стоили того. К сожалению, я не знаю ни одного ресурса, на который я мог бы указать, чтобы начать - вам, в основном, нужно собирать кусочки по ходу дела: \ Удачи вам в вашем путешествии :)
jw013

Ответы:

15

Вы можете запустить скрипты Python, сделав их исполняемыми ( chmod +x test.py) и сделав #!/usr/bin/env pythonпервую строку. Как только вы это сделаете, запуск test.py argsвызовет python для запуска вашего скрипта. Читайте о Шебанге , если вы хотите узнать больше.

jw013
источник
Это не сработало для меня. $ test.py 30дал ошибку Баш: -bash: test.py: command not found. Пока спасибо за вашу помощь!
ACarter
8
@ACarter Это потому, что оно не в твоем $PATH. Либо используйте путь, например, /path/to/test.pyили ./test.pyесли вы /path/toуже в, или добавьте /path/toк своему $PATH. На этом сайте много повторяющихся вопросов о последнем.
jw013
Как только вы добавите что-то в свой $PATHфайл, пропустите окончание файла, например .py.
Reactormonk
#!/usr/bin/env pythonПрежде чем вы сможете удалить расширение .py, вам понадобится верхняя часть вашего скрипта. Но любой сценарий, который содержит этот вызов или аналогичный (например, #!/bin/shдля сценариев оболочки), может быть назван без расширения. Это не имеет никакого отношения к тому, находится ли он в вашем PATH или нет.
Майкл Хэмптон
2
Проще говоря, расширения не имеют значения в мире Unix, в отличие от Windows. где расширения нравятся .EXEи .COMимеют значение. Однако обоснование удаления расширения заключается в том, что универсальные исполняемые файлы должны быть просто универсальными исполняемыми файлами. Смысл этой тавтологии заключается в том, что пользователям просто нужна функциональность, и им не нужно знать или заботиться о том, является ли это Perl, Python, sh, bash, awk и т. Д. И, делая сценарий исполняемым и добавляя shebang, он становится универсальным исполняемым файлом.
jw013
2

В Си это выглядит так:

int main(int argc, char *argv[]) {

Argc - это число аргументов. Обратите внимание, что имя программы / инструмента имеет значение.

Сами аргументы заканчиваются в векторе аргументов (или массиве), argv.

Тогда есть сложная часть написания кода, чтобы справиться с ними намеченным способом.

Затем скомпилируйте с gcc. Вы указываете название программы с -oфлагом (outfile). Запустите файл из его текущего каталога следующим образом: ./tool_name input_file_1 ... input_file_n(или поместите его в каталог, который появляется, когда вы пишете echo $PATH, тогда вы можете вызвать его из любого места, то есть без точки).

Эмануэль Берг
источник
1

Я использую Go. Это скомпилированный язык, кросс-платформенный, с простотой программирования на динамическом языке и поддержкой параллелизма и коммуникации.

Я не собираюсь возвращаться к Python, потому что очень интересно разрабатывать с Go.

http://golang.org/
https://github.com/languages/Go

Здесь у вас есть простая программа, которая получает аргументы, используемые в этой команде:

package main

import (
  "fmt"
  "flag"
)

func main() {
  fmt.Println("Arguments: ", flag.Args())
}

http://play.golang.org/p/1dpUT11-cc

Марк
источник
Go отлично подходит для некоторых целевых вариантов использования; однако сравнивать Go и Python для общих утилит - это все равно, что сравнивать охотничий нож (Go) со швейцарским армейским ножом (Python)
Майк Пеннингтон
1
Go - это язык общего назначения, который используется, например, в Youtube, в веб-приложениях или для создания игр (игра завершена, а другая находится в разработке). В дополнение к использованию в приложениях CLI.
Марк
5
Он просто хочет знать, как сделать исполняемую программу; нам действительно не нужно вступать в языковую войну
Майкл Мрозек