Использование инструментов командной строки

Автоматизируйте и ускорьте рабочий процесс

Интерфейс командной строки (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​​\n​​line2​​\n​​line3 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 Рикардо Джерарди:



Файлы кода доступны на странице книги здесь:



📣 Как вы используете командную строку для повышения эффективности задач? Поделитесь в комментариях.