Оболочка Bourne-again или просто bash - это оболочка Unix и командный язык. С 1989 года он широко распространен как оболочка по умолчанию для большинства дистрибутивов Linux и macOS. Недавно он стал доступен и для Windows.

Эффективное использование оболочки сильно влияет на нашу продуктивность. Короткие команды легко выучить и обладают огромным потенциалом, потому что мы можем свободно передавать их по конвейеру. Давайте погрузимся в командную строку!

Настроить профиль bash

Важно, чтобы наша консоль имела тот стиль, который нам нужен. .bashrc можно создавать и редактировать в виде обычного текста, однако существует отличный веб-сайт, который позволяет нам создавать наши любимые подсказки с помощью перетаскивания. Такой сгенерированный файл можно загрузить, а затем изменить.

Примеры

В этом разделе представлены несколько примеров. Различные команды (grep, find, git, sed, cat, wc, zip) конвейеризированы для достижения более сложного поведения.

Мои примеры

  • Подсчитайте классы (или перечисления / интерфейсы, если мы изменим шаблон) в каталоге проекта (не только отдельные .java файлы, но и внутренние классы):
    $ grep -roh --include=*.java 'class ' . | wc -w
  • Найдите строки, содержащие тег <ns1:Foo> в input.xml, и сохраните только значения элементов в output.txt:
    $ grep 'ns1:Foo' file.xml | sed -e 's/<ns1:Foo>\(.*\)<\/ns1:Foo>/\1/’ | cat > output.txt
  • Найдите коммиты, содержащие тег [JIRA], и отобразите одну строку перед тегом и две строки после него:
    $ git log | grep -B1 -A2 '[JIRA]'
  • Найдите все коммиты, в которых были изменены Controller файлы, и отобразите их авторов, не вставляя разделителей групп:
    $ git log --all -- '*Controller*' | grep 'Author' --group-separator=''

Примеры Прагматичного программиста

  • Найти все .kt файлы, которые были изменены позже build.gradle:
    find . -name '*.kt' -newer build.gradle -print
  • Создайте архив (tar или zip) с исходным кодом Java и Kotlin:
    zip sources.zip *.java *.kt
    tar cvf sources.tar *.java *.kt
  • Показать файлы Java, которые были изменены за последнюю неделю:
    find . -name '*.java' -mtime +7 -print
  • Показать файлы Java, которые были изменены за последнюю неделю, и использовать RxJava:
    find . -name '*.java' -mtime +7 -print | xargs grep 'import io.reactivex'

Разница между точкой с запятой и двойным амперсандом (; vs. &&)

«;» просто разделяет две команды, «&&» означает логическое И (так, как и в большинстве языков программирования, есть также ИЛИ «||»). Рассмотрим следующий пример:

$ false ; echo "OK"
OK
$ true ; echo "OK"
OK
$ false && echo "OK"
$ true && echo "OK"
OK
$ false || echo "OK"
OK
$ true || echo "OK"
$

echo "OK" всегда запускается для «:». Что касается логических операторов, вторая часть выполняется только тогда, когда имеет смысл вычислить правильный операнд.

Разница между одинарными и двойными кавычками (‘… ‘vs.«… ’) »

Двойные кавычки интерполируют строки между ними, одинарные - нет (Справочное руководство Bash). Следующий пример прекрасно это иллюстрирует:

$ echo "$(echo "qoute")"
qoute
$ echo '$(echo "qoute")'
$(echo "qoute")

Мастерская Shell

Если вы хотите пройти онлайн-курс, я рекомендую краткое введение от Udacity. Описаны несколько основных команд (ls, mv и т. Д.), А также некоторые более сложные, например grep, curl или less.

Спасибо за чтение и оставайтесь на связи! 👋