Использование инструментов командной строки
Автоматизируйте и ускорьте рабочий процесс
Интерфейс командной строки (CLI) часто является лучшим инструментом для повторяющихся задач, таких как чтение и запись файлов, управление иерархиями каталогов, диагностика сети, загрузка файлов и работа с API. Вы даже можете автоматизировать создание диаграмм через командную строку. Ниже приведены некоторые ресурсы, которые помогут вам на пути к эффективному рабочему процессу с использованием CLI, многие из которых вы можете прочитать непосредственно на Medium, если вы являетесь подписчиком.
Книги CLI
Прочитайте Small Sharp Software Tools автора Брайана П. Хогана на Medium.
Бета-версия Создание программного обеспечения с использованием современных методов построения диаграмм, автор Эшли Пикок, опубликована на The Pragmatic Bookshelf. Ищите его на Medium в 2023 году.
Прочтите Мощные приложения командной строки в Go автора Рикардо Херарди на Medium.
Прочтите tmux 2 от Брайана П. Хогана на Medium.
Прочтите Modern Vim Дрю Нила на Medium.
Прочтите Practical Vim, Second Edition Дрю Нила на Medium
CLI-статьи
Читателям нравятся эти статьи авторов PragProg, в которых рассказывается о различных способах использования командной строки.
Выдержки из книги CLI
Если вы готовы начать прямо сейчас, вот два кратких чтения из книг PragProg.
Создание каталогов из программных инструментов Small Sharp, автор Брайан П. Хоган
Каталоги помогают упорядочивать файлы и проекты. Команда mkdir позволяет создать каталог. Давайте используем его для создания каталога с именем веб-сайт на рабочем столе. В командной строке, если вы все еще находитесь в каталоге рабочего стола, введите:
$ mkdir website
Если графический рабочий стол вашего компьютера виден, вы увидите каталог. В противном случае используйте команду ls для просмотра:
$ ls
После того, как вы создали каталог, вы можете использовать команду cd для перехода в этот каталог:
$ cd website
Затем вы можете создавать новые каталоги внутри этого каталога для изображений, таблиц стилей и скриптов. Позже вы изучите более эффективные способы создания сложных структур каталогов для проектов. А пока взгляните, как вы можете вернуться в свой домашний каталог.
Продолжить чтение Small Sharp Software Tools Брайана Хогана:
Добавление флагов командной строки из мощных приложений командной строки в Go, автор Рикардо Херарди
Хорошие инструменты командной строки обеспечивают гибкость за счет опций. Текущая версия инструмента счетчика слов подсчитывает слова. Давайте также добавим возможность подсчета строк, предоставив пользователю возможность решать, когда переключать это поведение с помощью флагов командной строки.
Go предоставляет пакет флагов, который можно использовать для создания флагов командной строки и управления ими. Вы узнаете об этом более подробно в разделе Обработка нескольких параметров командной строки. А пока откройте файл main.go и добавьте этот пакет в раздел импорта:
import ( "bufio" » "flag" "fmt" "io" "os" )
Затем обновите основную функцию, добавив определение нового флага командной строки:
func main() { // Defining a boolean flag -l to count iines instead of words lines := flag.Bool("l", false, "Count lines") // Parsing the flags provided by the user flag.Parse()
Это определяет новую опцию -l, которую мы будем использовать, чтобы указать, следует ли считать строки. Значение по умолчанию — false, что означает, что нормальным поведением является подсчет слов.
Завершите основную функцию, обновив вызов функции count, передав значение флага:
// Calling the count function to count the number of words (or lines) // received from the Standard Input and printing it out fmt.Println(count(os.Stdin, *lines)) }
Наконец, обновите функцию count, чтобы она принимала этот новый логический аргумент, и добавьте проверку, чтобы изменить функцию scan.Split на bufio.ScanWords только в том случае, если этот параметр имеет значение false, поскольку поведение типа сканера по умолчанию заключается в подсчете строк:
»func count(r io.Reader, countLines bool) int { // A scanner is used to read text from a Reader (such as files) scanner := bufio.NewScanner(r) » // If the count lines flag is not set, we want to count words so we define » // the scanner split type to words (default is split by lines) » if !countLines { » scanner.Split(bufio.ScanWords) » } // Defining a counter wc := 0 // For every word or line scanned, add 1 to the counter for scanner.Scan() { wc++ } // Return the total return wc }
Поскольку вы изменили функцию подсчета, рекомендуется добавить еще один тест в тестовый файл, чтобы убедиться, что новая функция работает правильно. Сделайте это, добавив новую тестовую функцию TestCountLines в ваш файл main_test.go:
// TestCountLines tests the count function set to count lines func TestCountLines(t *testing.T) { b := bytes.NewBufferString("word1 word2 word3\nline2\nline3 word1") exp := 3 res := count(b, true) if res != exp { t.Errorf("Expected %d, got %d instead.\n", exp, res) } }
В этом тесте используется буфер для имитации ввода с тремя строками с использованием символа новой строки \n. Затем он выполняет обновленную функцию подсчета с этим буфером и параметром countLines, установленным в значение true, для подсчета строк.
Перед выполнением тестов обновите существующую тестовую функцию TestCountWords, передав значение false в качестве нового параметра функции подсчета, иначе тест завершится ошибкой.
// TestCountWords tests the count function set to count words func TestCountWords(t *testing.T) { b := bytes.NewBufferString("word1 word2 word3 word4\n") exp := 4 » res := count(b, false) if res != exp { t.Errorf("Expected %d, got %d instead.\n", exp, res) } }
Теперь выполните все тесты, чтобы убедиться, что функция работает в обоих случаях:
$ go test -v === RUN TestCountWords --- PASS: TestCountWords (0.00s) === RUN TestCountLines --- PASS: TestCountLines (0.00s) PASS ok pragprog.com/rggo/firstProgram/wc 0.003s
Снова соберите программу:
$ go build
Инструмент wc теперь принимает флаг командной строки -l для подсчета строк вместо слов. Используйте его для подсчета количества строк в команде main.go:
$ cat main.go | ./wc -l 43
Используя флаги командной строки, вы можете расширить функциональность своих инструментов без ущерба для гибкости для ваших пользователей. Далее мы запустим этот инструмент в другой операционной системе.
Продолжить чтение Мощные приложения командной строки в Go Рикардо Джерарди:
Файлы кода доступны на странице книги здесь:
📣 Как вы используете командную строку для повышения эффективности задач? Поделитесь в комментариях.