Редактор bash для windows

Время на прочтение17 мин

Количество просмотров39K

Bash, он же возрождённый shell, является по-прежнему одним из самых популярных командных процессоров и интерпретаторов сценариев. Как бы его ненавидели и не пытались заменить, всё равно он присутствует вокруг нас и никуда не собирается исчезать. Если вам приходится писать bash скрипты или вы только планируете этим заняться, данная статья написана для вас.

Статья несет исключительно рекомендательный характер и затрагивает в первую очередь bash, но также будет полезна и для работы с совместимыми оболочками, такими как: sh, ash, csh, ksh и tcsh.

На данный момент, тема bash скриптинга не менее актуальна чем 10 или 20 лет назад. Хотя большинство дистрибутивов Linux перешли на Systemd или аналоги, а System V с скриптами для запуска служб ушел на пенсию, многое по прежнему реализовано при помощи скриптов и многие из них — это shell скрипты. В ключевых и популярных дистрибутивах, bash является оболочкой по умолчанию, и это неспроста, при помощи него легко автоматизировать рутину. С появлением docker, а после и kubernetes, тема bash скриптов стала только актуальнее, количество всевозможных docker-entrypoint.sh, Job, CronJob и initContainers растет, а реализуются они чаще всего при помощи bash. Инструкция RUN в Dockerfile, вовсе внесла огромный вклад в мировой запас shell строк.

Это несложно, но необходимо знать некоторые основы bash скриптинга. Поехали!


Текстовый редактор

Начнем с выбора среды разработки, именно она позволяет объединять различные аспекты написания программы, повышая продуктивность за счет объединения общих действий по написанию программного обеспечения в одном приложении.

Я в своей практике использовал разные редакторы для работы с shell скриптами, приведенный список не является конечным, и перечислю только те, которые запомнились больше всего. Разделим на три условные категории:

  • Консольные текстовые редакторы. Vim, Emacs и Nano — классическая троица, сейчас уже редко кто использует на рабочих станциях как основной инструмент, но vi и nano незаменимы для быстрого редактирования файлов в удаленных ssh сессиях. Если вы еще не работали с ним, рекомендую освоить такие вещи как поиск, замена и форматирование, хотя бы в nano.

  • Графические текстовые редакторы. Mousepad, Gedit, Notepad++ и т.п. Легковесные редакторы, с подсветкой синтаксиса, автозаменой и прочим, что уже есть в консольных редакторах, но они всё еще не являются полноценной интегрированной средой разработки.

  • IDE. Geany, Atom, IntelliJ IDEA, Sublime Text и Visual Studio Code — это уже полноценные и расширяемые среды разработки. Долгие годы я пользовался Geany и пробовал все перечисленные варианты, но только с появлением VSCode мне удалось сменить основную IDE для большинства задач.

ℹ️ Половина статьи затрагивает конфигурацию параметров и расширения для Visual Studio Code. Хотя, эта IDE может быть не в вашем вкусе, но информация приведенная в статье будет полезна в академических целях, а полученные знания, вы можете адаптировать под свое любимое окружение.

Альтернативные редакторы

Существует как минимум три альтернативных среды разработки для написания bash скриптов:

  • Специализированная IDE BashEclipse основанная на Eclipse.

  • В IntelliJ IDEA можно добиться расширенной поддержки bash скриптинга путем установки расширений Shell Script, ShellCheck и BashSupport.

  • Bash Kernel для Jupyter Notebook.


Настройка окружения

Сперва следует настроить редактор так, чтобы он помогал нам писать скрипты в едином стиле и исправлял за нас небольшие огрехи.

Ширина строк кода

Начнем мы с того, что выведем на экран вертикальные линии для отображения столбцов 72, 80 и 132 символов, данная длина является «стандартным» пределом для ширины кода. И мы будем стараться при написании скриптов умещаться в границу 80 столбцов, 72 столбец будет нашим желанным ориентиром, а 132 столбец пометим как край документа, применимый в исключительных ситуациях, за ним же следует пропасть.

Добавим нижеприведенную конфигурацию в файл настроек settings.json для Visual Studio Code.

Как найти settings.json

  1. Откройте Visual Studio Code

  2. Нажмите F1, чтобы открыть командную панель

  3. Введите в открывшуюся панель «open settings»

  4. Вам представлены два варианта, выберите «Open Settings (JSON)»

{
  "[shellscript]": { // настройки применимые только для shellscript файлов
    "editor.rulers": [ // вертикальные лини подсветки столбцов 72, 80, 132 
      { "column": 72,  "color": "#1e751633", },
      { "column": 80,  "color": "#c2790b99", },
      { "column": 132, "color": "#a10d2d99" }
    ],
    "editor.minimap.maxColumn": 132, // ширина миникарты
    "editor.wordWrap": "off", // запрещаем перенос строк
  },
  // ... прочие настройки
}

Краткий ответ, почему именно 72, 80 и 132 символа

Вы можете поблагодарить перфокарту IBM 1928 года за этот предел — в ней было 80 столбцов. Почему 80? Дело в том, что типичный шаг пишущей машинки 10-12 символов на дюйм, а это приводит к документам шириной от 72 до 90 символов, в зависимости от размера полей. После этого ранние телетайпы, а затем видео-терминалы использовали 80 столбцов, а затем 132 столбца в качестве стандартной ширины. Сейчас же, к примеру, пропорции окна эмулятора терминала по умолчанию остаются равными 80×24.

Три файла с шириной в 80 символов в Full HD разрешении и 12 размером шрифта, уже немного не помещаются на экран.

Три файла с шириной в 80 символов в Full HD разрешении и 12 размером шрифта, уже немного не помещаются на экран.

Но ведь сейчас же не 1928 год! Да, но эргономика чтения файлов в 80 столбцов гораздо выше, а при сравнении двух файлов мы используем в два раза большую ширину (бывают еще diff-ы трех состояний). Все еще используются удаленные параллельные терминалы в гипервизорах и KVM-свитчи в серверных, и порой приходится что-то быстро поправить через них, находясь в сессии с разрешением 1024×768, а может и меньшим.

Возможно, вы владелец 4K+ дисплея и думаете, что вас это не касается. Но подумайте о других, кто будет использовать ваши скрипты, если конечно они публикуются за рамками вашего localhost.

Отступы и окончание строк

Одной из проблем, которую я встретил 15 лет назад, когда только знакомился с bash и наблюдаю по сей день, это CRLF (\r\n или 0x0D0A) в файлах сценариев. Источником проблемы, чаще всего является копипаста bash скриптов в windows системах, но также это может быть и просто по невнимательности. Давайте настроим завершение сток при помощи LF.

Помимо типа окончания строк, также включим добавление пустой строки в конец файла и настроим отступы и их визуализацию.

{
  "[shellscript]": { // настройки применимые только для shellscript
    "files.eol": "\n", // явно зададим LF формат EOL
    "files.insertFinalNewline": true, // завершаем все файлы новой строкой
    "files.trimFinalNewlines": true, // удалим лишние новые строки в конце файла
    "files.trimTrailingWhitespace": true, // удалим лишние пробелы в конце строк
    "editor.renderWhitespace": "boundary", // отобразим два и более пробелов
    "editor.insertSpaces": true, // отступы делаем пробелами
    "editor.tabSize": 2, // размер отступа в два пробела
  },
  // ... прочие настройки
}

Чем страшен CRLF?

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

Давайте рассмотрим на примере, у нас есть простейший скрипт:

#!/usr/bin/env bash

set -eu

printf '%s ' "Hi ${USER:-John Doe}! Today is"
LANG=en date

Сохраним его в файл test-eol.sh, сделаем его исполняемым chmod +x ./test-eol.sh и проверим работу:

# ./test-eol.sh
Hi woozymasta! Today is Mon Oct 18 00:48:13 MSK 2021

Всё хорошо, давайте заменим LF на CRLF, можно воспользоваться командой sed $'s/$/\r/' -i test-eol.sh и запустим сценарий еще раз:

# ./test-eol.sh
/usr/bin/env: 'bash\r': No such file or directory

Скрипт упал с ошибкой о том, что файла bash\r не существует, утилита env приняла на вход строку как есть. И это хорошо, что скрипт упал, ведь могло произойти что-то более непредвиденное. Давайте обойдем использование shebang, передав путь к скрипту как аргумент для bash:

# bash ./test-eol.sh
./bash-eol.sh: line 2: $'\r': command not found
: invalid optionine 3: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
./bash-eol.sh: line 4: $'\r': command not found
 ./bash-eol.sh: line 6: $'date\r': command not found

Как видно, теперь были обработаны все инструкции скрипта. Правда set -e не смог выполниться, и каждая команда сценария, смогла выполниться с ненулевым кодом возврата.

В этом примере, ничего страшного не произошло, но, что если у вас был бы такой скрипт:

#!/usr/bin/env bash

set -eu

printf '%s ' "Hi ${USER:-John Doe}! Today is"
LANG=en date || \
  { rm -rf / --no-preserve-root; echo "you will not pass"; }; echo Done

Осторожно! Для проверки этого скрипта, всё же лучше замените rm -rf / --no-preserve-root , к примеру на touch test

Зачем нужна пустая строка в конце файла?

Речь идет не о добавлении дополнительной строки в конец файла, а о том, чтобы не удалять новую строку, которая должна быть там.

Текстовый файл в Unix состоит из серии строк, каждая из которых заканчивается символом новой строки \n. Таким образом, файл, который не является пустым и не заканчивается новой строкой, не является текстовым файлом.

Утилиты, которые должны работать с текстовыми файлами, могут не справиться с файлами, которые не заканчиваются символом новой строки. Исторические утилиты Unix могут, например, игнорировать текст после последней новой строки. Утилиты GNU придерживаются политики приличного поведения с нетекстовыми файлами, как и большинство других современных утилит, но вы все равно можете столкнуться со странным поведением с файлами, в которых отсутствует последняя новая строка.

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

Автосохранение

Данный момент выделен отдельно неспроста, редактировать shell сценарии в процессе их работы крайне нежелательно. Всё потому, что файл читается построчно и внесенные правки во время работы сценария могут вызвать непредвиденное поведение.

Просто помните об этом, и не включайте автосохранение при написании bash скриптов. К сожалению параметр files.autoSave не поддерживается для выборочных типов файлов, а устанавливается глобально на всё окружение.

Проверим на практике редактирование уже исполняющегося скрипта

Ситуации могут быть разные, к примеру, у вас есть долгоиграющий скрипт, и вы, в процессе его работы решили, всего лишь добавить еще одно отладочное сообщение в теле цикла. Скорее всего вас ждут проблемы на выходе из цикла.

А теперь рассмотрим простой доказательный пример, создадим скрипт test.sh работающий две секунды:

#!/usr/bin/env bash

sleep 1s
echo one
sleep 1s
echo two

Запустим скрипт и по итогу выполнения напечатаем код выхода, объединим это в группу и запустим в отдельном потоке, а пока он отработает половину отведенного ему времени, допишем в него еще одну команду exit 42 :

{ ./test.sh && echo $?; } & sleep 1s; echo 'exit 42' >> ./test.sh; wait

ℹ️ Если однострочники у вас вызывают некоторое волнение, воспользуйтесь сервисом explainshell.com, он поможет на первых порах разбирать такие конструкции.

И вот итог:

[1] 1208831
one
two
[1]+  Выход 42           { ./test.sh && echo $?; }

Но допустим автосохранение отключать нельзя, или вы сами на автомате нажали Ctrl+S, можно как-то предостеречь это поведение?

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

cat ./test.sh | bash -s - "${args[@]}"

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


Пожалуй это все параметры для редактора, которые хотелось осветить. Для удобства настройки, все параметры которые были внесли в settings.json приведены ниже:

Все параметры в settings.json для shellscript

{
  "files.autoSave": "off",
  "[shellscript]": {
    "files.eol": "\n",
    "files.insertFinalNewline": true,
    "files.trimFinalNewlines": true,
    "files.trimTrailingWhitespace": true,
    "editor.renderWhitespace": "boundary",
    "editor.insertSpaces": true,
    "editor.tabSize": 2,
    "editor.tabCompletion": "on",
    "editor.wordWrap": "off",
    "editor.rulers": [
      {
        "column": 72,
        "color": "#1e751633",
      },
      {
        "column": 80,
        "color": "#c2790b99",
      },
      {
        "column": 132,
        "color": "#a10d2d99"
      }
    ],
    "editor.minimap.maxColumn": 132,
  }
}

Утилиты и расширения

Всё обилие возможностей и расширенное погружение в написание bash сценариев, открывается при использовании дополнительных утилит, таких как: линтер, отладчик, форматер, языковой сервер и т.п. Сами по себе утилиты хоть и решают свои функциональные задачи, только с интеграцией в IDE они по настоящему раскрывают свою мощь.

Модульность IDE, это большой плюс, главное не перестараться

Модульность IDE, это большой плюс, главное не перестараться

ShellCheck

ShellCheck — это инструмент который дает предупреждения и предложения для сценариев bash и sh. Незаменимая вещь, которую следует использовать повсеместно для написания скриптов и встраивать в CI пайплайны. Поможет писать сценарии более корректно и надежно, укажет на типичные проблемы синтаксиса и семантические проблемы, а также уведомит о тонкостях и возможных подводных камнях в разных конструкциях.

Рекомендуется использовать последний релиз приложения.

Для проверки сценария достаточно выполнить:

shellcheck /path/to/script.sh

Пример результата работы shellcheck

In /path/to/script.sh line 5:
echo $none
     ^---^ SC2154: none is referenced but not assigned.
     ^---^ SC2086: Double quote to prevent globbing and word splitting.

Did you mean: 
echo "$none"


In /path/to/script.sh line 6:
. ./test
  ^----^ SC1091: Not following: ./test was not specified as input (see shellcheck -x).

Но гораздо нагляднее, будет видеть все предупреждения и подсказки в самой IDE. Для этого установим расширение ShellCheck:

ext install timonwong.shellcheck
Пример обнаружения проблем, с сылками на документацию и возможностью хотфикса

Пример обнаружения проблем, с сылками на документацию и возможностью хотфикса

BASH Debugger

BASH Debugger — это внешний отладчик для bash, который следует синтаксису команды gdb.

К сожалению в большинстве дистрибутивов пакет или отсутствует, или имеет очень старую версию, по этому соберем проект из исходников. Скачаем последнюю версию или клонируем с зеркала на github и собираем:

tar xf bashdb-5.0-1.1.2.tar.gz
cd bashdb-5.0-1.1.2/
./configure
make

sudo make install
# можно взять один бинарь и обойтись без make install
# если работать c bashdb будем только из vscode
# cp bashdb ~/.local/bin/

Теперь для запуска отладки скрипта выполним команду:

bash --debugger -- /path/to/script.sh
# или
bashdb /path/to/script.sh

Пример результата работы bashdb

bash debugger, bashdb, release 5.0-1.1.2

Copyright 2002-2004, 2006-2012, 2014, 2016-2019 Rocky Bernstein
This is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.

(/path/to/script.sh:5):
5:	echo $none
bashdb<0> backtrace
->0 in file `./bash-eol.sh' at line 5
##1 main("/usr/share/bashdb/bashdb-main.inc") called from file `/path/to/script.sh' at line 0
bashdb<1> debug
Debugging new script with /usr/bin/bash --init-file /tmp/bashdb_profile_1067091 --debugger echo 
/usr/bin/echo: /usr/bin/echo: не удалось запустить двоичный файл
bashdb<2> continue

/path/to/script.sh: строка 6: ./test: Нет такого файла или каталога
(standard_in) 1: syntax error
hi
Done 

Но это не так удобно, как расставлять точки останова в IDE, по этому установим расширение Bash-debug:

⚠️ Внимание! Для работы требует наличия bashdb в системе

ext install rogalmic.bash-debug
Точки останова в bash сценариях

Точки останова в bash сценариях

Shell Format

Shfmt — утилита для форматирования shell сценариев. Установим последний релиз и попробуем на практике:

# Форматировать скрипт с настройками по умолчанию, вывод направить файл
shfmt /path/to/script.sh > /path/to/script-formated.sh
# Перезаписать файл, использовать отступ в два пробела
shfmt -w -i 2 ~/desktop/bash-eol.sh

Очередь расширения, установим Shell Format:

ext install foxundermoon.shell-format

Нам стало доступно форматирование файлов shellscript, и им уже можно воспользоваться. Для этого вызовем палитру команд, нажав F1, введем в поле «format document» и выберем этот же пункт.

Пример форматирования документа

Пример форматирования документа

Помимо этого, вы можете настроить автоматическое форматирование документов, при сохранении файла, параметр editor.formatOnSave.

ℹ️ Увы расширение не позволяет форматировать выделенный блок кода, в связи с этим недоступен параметр editor.formatOnPaste , позволяющий форматировать код вставляемый из буфера обмена.

Bash Language Server

Bash Language Server — языковой сервер для интеграции в множество различных IDE. Установка языкового сервера приносит нам поведение среды разработки, как у больших языков программирования, такие возможности как: поиск ссылок, переход к объявлению, автодополнение, документация и т.п.

Для VSCode достаточно установить расширение Bash IDE:

ext install mads-hartmann.bash-ide-vscode
Пример отображения ссылок на функцию и автодополнения

Пример отображения ссылок на функцию и автодополнения

ℹ️ Расширение также поддерживает интеграцию с explainshell, но для этого вам понадобится держать запущенным сервер explainshell, а на выходе вы не получите всей той магии, что доступна на сайте explainshell.com. В связи с этим интеграцию считаю сомнительной, и у себя не использую.

Shell Completion

Работая с bash как оболочкой, во многих моментах помогает автодополнение по TAB, так вот для VSCode есть возможность дополнять аргументы для команд, реализуется это при помощи расширения Shell Completion. Давайте проверим:

ext install tetradresearch.vscode-h2o
Пример автодополнения ключей к утилитам

Пример автодополнения ключей к утилитам

Manpages

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

ext install meronz.manpages

Использовать расширение просто, выделяем в теле скрипта имя интересной нам команды и просим показать man через палитру команд или в контекстном меню.

Пример просмотра руководства jq с свернутыми заголовками

Пример просмотра руководства jq с свернутыми заголовками

ShellMan

Shellman — наверное единственная совместимая с ShellCheck коллекция сниппетов для bash. Будет полезно как новичкам, для более быстрого знакомства с скриптами, так и бывалым разработчикам позволит сэкономить время на написание рутинных конструкций. В магазине расширений доступно около десятка расширений с снипетами для shell скриптов наряду с Shellman, при желании вы можете комбинировать их.

Установка расширения:

ext install Remisa.shellman

Подробно ознакомится с возможностями и советами как пользоваться ShellMan вы можете в книге shellman-ebook.

Code Runner

Code Runner — расширение, позволяющее выполнять произвольный блок кода в самой IDE, для этого достаточно выделить необходимые строки и нажать CTRL+ALT+N, или вызвать данную функцию из контекстного меню, или палитры команд. Это заметно ускорит процесс написания скриптов.

ext install formulahendry.code-runner

Демонстрация работы (GIF 5МБ)

Hadolint

Hadolint — это, пожалуй лучший линтер для Dockerfile. Почему он оказался в этом списке? Всё довольно просто, в Dockerfile имеется инструкция RUN в которой размещается shell скрипт, а Hadolint помимо общей проверки синтаксиса файла, также использует ShellCheck для проверки этих скриптов.

Скачаем последнюю версию приложения с страницы релизов. Запустим утилиту, передав путь к Dockerfile как аргумент.

hadolint ./Dockerfile

И установим расширение Hadolint в VSCode:

⚠️ Внимание! Для работы требует наличия hadolint в системе

ext install exiasr.hadolint
ShellCheck проверки работают в секции RUN в Dockerfile

ShellCheck проверки работают в секции RUN в Dockerfile

И как бонус, для подсветки синтаксиса shell скриптов в RUN секции Dockerfile, можно воспользоваться расширением Better Dockerfile Syntax.

Txt Syntax

Еще одно вспомогательное расширение Txt Syntax, напрямую не влияющее на bash скрипты, но позволяет выделить текстовые файлы (.txt, .out .tmp, .log, .ini, .cfg …) и предоставить общие служебные инструменты для текстовых документов. Shell сценарии часто опираются на всевозможные текстовые файлы, и будет полезно упростить работу с ними в IDE.

ext install xshrim.txt-syntax

ℹ️ Данное расширение помогает работать расширению manpages, а именно складывать и раскладывать заголовки в документах справки.

Better Shell Syntax

И в завершении списка, расширим подсветку синтаксиса. По умолчанию подсветка не настолько хороша как могла быть, и расширение Better Shell Syntax пытается исправить это, позволяя вашей теме лучше раскрашивать код.

ext install jeff-hykin.better-shellscript-syntax

ℹ️ Расширение не будет работать с стандартной темой (не будет эффекта), но всё будет хорошо в таких темах как: Material Theme, Gruvbox, XD Theme и подобных.

При этом может не очень хорошо работать с вашей любимой, нестандартной темой оформления, перед использованием, проверьте всё ли вас устраивает.

Примеры


Вот мы и закончили с обзором утилит и расширений. Последние два (Txt Syntax и Better Shell Syntax) несут больше косметический характер, и их можно смело пропустить, чего не могу сказать про весь оставшийся список, рекомендую хотя бы попробовать их на практике.

Для удобства установки, все расширения собраны в один пакет Shell script IDE, правда бинарные зависимости (bashdb и hadolint) придется устанавливать самостоятельно.

ext install woozy-masta.shell-script-ide

Отладка

Хорошо когда настроенная IDE есть под рукой, но не всегда бывает так, к примеру мы работаем на удаленном сервере или в контейнере. По этому затронем тему настройки окружения для отладки и немного коснемся её самой.

Когда что-то идет не по плану, вам нужно определить, что именно вызывает сбой сценария. Bash предоставляет возможность для отладки, это запуск подоболочки с параметром -x, который запускает весь сценарий в режиме отладки. Следы каждой команды плюс ее аргументы выводятся на стандартный вывод после того, как команды были развернуты, но до их выполнения.

Еще немного про ключи для отладки

Параметр отладки может быть установлен в произвольном месте в теле скрипта. Для отладки определенного блока кода, установим перед кодомset -x , а для выхода из отладки при достижении конца отлаживаемого блока, обратим параметр вызвав set +x .

Минус используется для активации опций оболочки, а плюс для деактивации. Пусть это вас не смущает.

Параметры которые вам скорее всего понадобятся для отладки:

set -f

set -o noglob

Отключить получение имени файла с использованием метасимволов (подстановка).

set -v

set -o verbose

Печатает строки ввода оболочки по мере их чтения. Листинг скрипта будет предварительно выводиться на экран перед командами.

set -x

set -o xtrace

Печатает трассировку команд перед выполнением команды.

set -n

set -o noexec

Не исполнять сценарий, а только проверить на наличие синтаксических ошибок. Проверка будет выполнена только для грубых ошибок, надежнее использовать shellchek.

Также длинные параметры следующие за set -o могут быть переданы через переменную SHELLOPTS или используя родную для bash команду shopt.

В shopt включение или отключение опций происходит при помощи флагов:

  • -s (set) — установить опцию;

  • -u (unset) — отключить опцию.

Для того что бы отобразить текущие настройки параметров, выполните set -o или shopt

Для экспериментов, давайте создадим простой скрипт.

Скрипт test.sh

#!/usr/bin/env bash

set -eu

function print-msg () {
  printf '%b%-20s%b' "${colors[${1:-0}]}" "${@:2}" "${colors[0]}"
}

function random-color-echo() {
  print-msg $((1 + RANDOM % $((4 - 1)))) "${*:-}"
}

function msg () {
  random-color-echo "Hi ${*:-}!"
}

colors=(
  "$(tput sgr0)"    # reset
  "$(tput setaf 1)" # red
  "$(tput setaf 2)" # green
  "$(tput setaf 3)" # yellow
  "$(tput setaf 4)" # blue
)

for item in {"Bob","Alice"}; do
  echo "$({ msg "$item"; ( date '+%s%N' ); } & wait)"
done

echo 'Done'

И выполним его при помощи bash -x ./test.sh или добавив set -x в начало скрипта:

Пример работы стандартной трассировки вызовов bash

Пример работы стандартной трассировки вызовов bash

Замечательно, теперь мы видим как работает наш скрипт. Стоит только пояснить, что означает + , во первых, как вы догадались, за ним следует трассировка команды из скрипта, а вот количество знаков меняется и оно обозначает несколько уровней косвенного обращения.

Для небольших блоков логики этого зачастую достаточно, но, что если хочется большего? И первое, что мы можем сделать, это добавить необходимую информацию в параметр PS4:

# Levels of indirection and time
PS4='+\011\[\e[3;34m\]\t\[\e[0m\]'
# User ID [Effective user ID]: Groups of user is a member
PS4+=' \[\e[0;35m\]$UID[$EUID]:$GROUPS\[\e[0m\] '
# Shell level and subshell
PS4+='\011\[\e[1;31m\]L$SHLVL:S$BASH_SUBSHELL\[\e[0m\]'
# Source file
PS4+=' \[\e[1;33m\]${BASH_SOURCE:-$0}\[\e[0m\]'
# Line number
PS4+='\[\e[0;36m\]#:${LINENO}\[\e[0m\]'
# Function name
PS4+='\011\[\e[1;32m\]${FUNCNAME[0]:+${FUNCNAME[0]}(): }\[\e[0m\]'
# Executed command
PS4+='\n# '
export PS4

ℹ️ Объявить PS4 вы можете в своем ~/.bashrc и он будет с вами постоянно, или определить свой формат отладки непосредственно в теле самого скрипта, или временно экспортировать изменения на время жизни оболочки bash.

О назначении параметров: PS0, PS1, PS2, PS3 и PS4

  • PS0 — Значение этого параметра раскрывается и отображается интерактивными оболочками после прочтения команды и до ее выполнения. Т.е. это будет напечатано перед исполнением каждой команды, по умолчанию не установлено.

  • PS1 — Значение этого параметра раскрывается и используется в качестве основной строки приглашения. Это ваше стандартное приветствие user@host:~

  • PS2 — Значение этого параметра раскрывается, как и в случае с PS1, и используется в качестве дополнительной строки приглашения.

  • PS3 — Значение этого параметра используется в качестве подсказки для команды select.

  • PS4 — Значение этого параметра расширяется, как в случае с PS1, и значение печатается перед отображением каждой команды bash во время трассировки выполнения. Первый символ расширенного значения PS4 при необходимости повторяется несколько раз, чтобы указать несколько уровней косвенного обращения. По умолчанию +

И снова запустив скрипт, мы увидим уже немного другой результат:

Расширенный вывод информации при трассировке вызовов bash

Расширенный вывод информации при трассировке вызовов bash

Давайте разберем этот пример, а в дальнейшем вы сами сможете реализовать удобный вывод отладочной информации под ваши нужды.

  • + — Первый символ, отображает уровни косвенного обращения к командам, эта часть осталась как в оригинальном PS4.

  • \t — Текущее время, полезно для изучения тайминга команд, может быть заменено к примеру командой date '+%x %X:%N %z' для более подробного информирования, включая отображение наносекунд.

  • $UID[$EUID]:$GROUPS — Выведем ID и эффективный ID пользователя, перечисляем группы, членом которых является текущий пользователь. Это будет полезно для скриптов выполняющих действия от разных пользователей.

  • L$SHLVL:S$BASH_SUBSHELL — Отображения уровня оболочки, и уровня вложенной подоболочкой. Когда вы запускаете команду в оболочке, она запускается на уровне, называемом уровнем оболочки. Внутри оболочки вы можете открыть другую оболочку, которая делает её подоболочкой, или оболочку, которая её открыла.

    • Уровень оболочки SHLVL поможет понять насколько глубоко вы находитесь в дочерних сессиях, ведь у каждой последующей оболочки могут быть добавлены или переопределены важные вам параметры.

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

  • ${BASH_SOURCE:-$0} — Имя исполняемого файла или функции.

  • #:${LINENO} — Номер трассируемой строки.

  • ${FUNCNAME[0]:+${FUNCNAME[0]}(): } — Имя функции в рамках которой происходит исполнение.

ℹ️ Подробную информацию о параметрах вы всегда найдете в man bash разделах PROMPTING и PARAMETERS/Shell Variables

Если вы обрабатываете вывод скрипта на лету или объем отладочного лога очень велик, было бы удобно направить трассировку в отдельный файл. Для этих целей существует параметр BASH_XTRACEFD , он позволяет указать номер файлового дескриптора для вывода сообщений трассировки.

Для этого мы создадим ссылку для файлового дескриптора с номером 3 на файл debug_$0.log где $0 это имя bash сценария, а переменной BASH_XTRACEFD передадим номер нашего нового дескриптора.

set -x
exec 3> "debug_$0.log"
BASH_XTRACEFD="3"

Также имеется возможность перенаправить вывод не в файл, а в утилиту, к примеру отправив сообщения утилите logger мы сможем обратится к журналу при помощи командыjournalctl -t test.sh.

set -x
exec 3> >(logger -t "$0")
BASH_XTRACEFD="3"

Теперь мы знаем как можно сделать отладку для всего сценария, или только для отдельной его части. Существует ли возможность принудительно исключить из отладки одну функцию? Да, и для этого достаточно в начало функции добавить такую конструкцию:

function some () {
  { local -; set +x; } 2>/dev/null
  echo 'Do some stuff'
}

На тот случай если стандартной трассировки bash вам недостаточно, нужно получить больше информации о работе скрипта, выполнить более тонкое профилирование работы или разобраться с зависаниями, обратитесь к таким системным инструментам как strace или в очень специфичной ситуации gdb (надеюсь с вами этого не произойдет)

Пример запуска отладки скрипта при помощи strace:

strace -C -f bash -x ./test.sh

Благодарю за ваше время и внимание, эффективного bash скриптинга вам!

Присоединяйтесь в телеграмм канал, где я периодически публикую заметки на тему DevOps, SRE и архитектурных решений.

Visual Studio Code extension utilizing the Bash Language Server and integrating with explainshell, shellcheck and shfmt.

We recommend that you install shellcheck to enable linting and install shfmt to enable formatting.

Features

  • [x] Jump to declaration
  • [x] Find references
  • [x] Code Outline & Show Symbols
  • [x] Highlight occurrences
  • [x] Code completion
  • [x] Simple diagnostics reporting
  • [x] Documentation for flags on hover
  • [x] Workspace symbols
  • [x] Rename symbol
  • [x] Format document
  • [x] Snippets

Configuration

To get documentation for flags on hover (thanks to explainshell), run a explainshell server and update your VS Code settings:

    "bashIde.explainshellEndpoint": "http://localhost:5000",

For security reasons, it defaults to "", which disables explainshell integration. When set, this extension will send requests to the endpoint and displays documentation for flags. We recommend using a local Docker image (see https://github.com/bash-lsp/bash-language-server/issues/180).

Содержание

  1. Как установить и использовать Linux в Windows 10
  2. Что нужно знать о Подсистеме Windows для Linux (WSL)
  3. Как установить Linux (Bash) в Windows 10
  4. Как использовать оболочку Bash и установить программное обеспечение для Linux
  5. Лучшие терминалы Linux и bash-редакторы, доступные онлайн
  6. Лучшие онлайн-терминалы для отработки команд Linux
  7. 1. JSLinux
  8. 2. Copy.sh
  9. 3. Webminal
  10. 4. Tutorialspoint Unix Terminal
  11. 5. JS/UIX
  12. 6. CB.VU
  13. 7. Linux Containers
  14. 8. Codeanywhere
  15. Лучшие редакторы bash, доступные онлайн
  16. Bash-компилятор Tutorialspoint
  17. JDOODLE
  18. Paiza.io
  19. ShellCheck
  20. Rextester
  21. Learn Shell
  22. CoCalc
  23. Bash в Windows 10
  24. Введение
  25. Установка
  26. Доступ к флешке из Bash в Windows
  27. Ошибки
  28. Установка с сайта aka.ms
  29. Установка bash в Windows 10
  30. Как узнать версию Windows 10
  31. Как включить подсистему Linux для Windows
  32. Обновление WSL до 2 версии
  33. Установка Ubuntu
  34. Как установить Nodejs в подсистеме Linux для Windows 10
  35. Установка Gulp в подсистеме Linux для Windows 10
  36. Npm: command not found

Как установить и использовать Linux в Windows 10

Данная инструкция посвящена Подсистеме Windows для Linux (WSL), которая позволяет устанавливать и запускать различные дистрибутивы Linux прямо в самой Windows.

Подсистема Windows для Linux, представленная в Anniversary Update, стала стабильной функцией Fall Creators Update. Теперь вы можете запускать в Windows Ubuntu и openSUSE, Fedora и Kali Linux, а также другие дистрибутивы Linux.

Что нужно знать о Подсистеме Windows для Linux (WSL)

Это не виртуальная машина, контейнер или программное обеспечение Linux, скомпилированное для Windows (например, Cygwin). Вместо этого Windows 10 предлагает полную подсистему Windows, предназначенную для Linux для запуска программного обеспечения Linux. Она основан на заброшенной работе Microsoft Project Astoria по запуску приложений Android в Windows.

Думайте об этом как о противоположности Wine. В то время как Wine позволяет запускать приложения Windows непосредственно в Linux, подсистема Windows для Linux позволяет запускать приложения Linux непосредственно в Windows.

Microsoft работала с Canonical, чтобы предложить полную среду оболочки Bash на основе Ubuntu, которая работает поверх этой подсистемы, а в настоящее время теперь можно запускать полноценные дистрибутивы Linux. Технически это вообще не Linux. Linux — это базовое ядро операционной системы, которое здесь недоступно. Вместо этого она позволяет запускать оболочку Bash и те же двоичные файлы, которые вы обычно запускаете в Ubuntu Linux. Сторонники свободного программного обеспечения часто утверждают, что среднюю операционную систему Linux следует называть «GNU/Linux», потому что на самом деле на ядре Linux работает множество программ GNU. Оболочка Bash, которую вы получите, на самом деле представляет собой все эти утилиты GNU и другое программное обеспечение.

Эта функция изначально называлась «Bash в Ubuntu в Windows», но она также позволяла запускать Zsh и другие оболочки командной строки. Теперь же она поддерживает и другие дистрибутивы Linux. Вы можете выбрать openSUSE Leap или SUSE Enterprise Server, Fedora или Kali Linux вместо Ubuntu.

Здесь есть некоторые ограничения. Она пока не поддерживает фоновое серверное программное обеспечение и официально не работает с графическими настольными приложениями Linux. Не все приложения командной строки также работают, поскольку функция не идеальна.

Как установить Linux (Bash) в Windows 10

Эта функция не работает в 32-битной версии Windows 10, поэтому убедитесь, что вы используете 64-битную версию Windows. Всё равно пора перейти на 64-разрядную версию Windows 10, если вы используете 32-разрядную версию.

Предполагая, что у вас 64-битная Windows, для начала зайдите в Панель управления → Программы → Включение или отключение компонентов Windows.

Включите в списке опцию «Подсистема Windows для Linux» и нажмите кнопку «ОК».

Нажмите «Перезагрузить сейчас», когда вам будет предложено перезагрузить компьютер. Эта функция не будет работать, пока вы не перезагрузитесь.

Примечание. Начиная с Fall Creators Update, вам больше не нужно включать режим разработчика в приложении «Настройки», чтобы использовать эту функцию. Вам просто нужно установить его из окна функций Windows.

После перезагрузки компьютера откройте Microsoft Store из меню «Пуск».

И выполните поиск «Linux» в магазине. Выберите Debian или другой дистрибутив Linux из приложения Store.

Вы увидите список всех дистрибутивов Linux, доступных в настоящее время в Магазине Windows. Сюда входят Debian, Kali Linux, Ubuntu, openSUSE Leap и openSUSE Enterprise с обещанием скорого появления Fedora.

Чтобы установить дистрибутив Linux, щёлкните его, а затем нажмите кнопку «Получить» или «Установить», чтобы установить его, как любое другое приложение Store.

Если вы не знаете, какую среду Linux установить, мы рекомендуем Debian. Этот популярный дистрибутив Linux, которые может применяться для самых разных целей. Или выберите другую систему Linux если у вас более специфические потребности.

Вы также можете установить несколько дистрибутивов Linux, каждый из которых получит свои уникальные ярлыки. Вы даже можете запускать несколько разных дистрибутивов Linux одновременно в разных окнах.

Как использовать оболочку Bash и установить программное обеспечение для Linux

Теперь у вас есть полная оболочка командной строки bash на основе Debian или любого другого установленного вами дистрибутива Linux.

Поскольку это одни и те же двоичные файлы, вы можете использовать команду Debian apt или apt-get для установки программного обеспечения из репозиториев Debian, если вы используете Debian. Просто используйте любую команду, которую вы обычно используете в этом дистрибутиве Linux. У вас будет доступ ко всему программному обеспечению командной строки Linux, хотя некоторые приложения могут ещё работать не идеально.

Чтобы открыть установленную вами среду Linux, просто откройте меню «Пуск» и найдите установленный вами дистрибутив. Например, если вы установили Kali Linux, запустите ярлык Kali Linux.

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

При первом запуске среды Linux вам будет предложено ввести имя пользователя и пароль UNIX. Они необязательно должны совпадать с вашим именем пользователя и паролем Windows, но будут использоваться в среде Linux.

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

Если у вас установлена Kali Linux, вы также можете запустить команду kali, чтобы установить её. Для openSUSE Leap 42 используйте opensuse-42. Для SUSE Linux Enterprise Sever 12 используйте sles-12. Эти команды перечислены на странице каждого дистрибутива Linux в Магазине Windows.

Вы по-прежнему можете запустить среду Linux по умолчанию, выполнив команду bash, но Microsoft утверждает, что это устарело. Это означает, что команда bash может перестать работать в будущем.

Если у вас есть опыт использования оболочки Bash в Linux, Mac OS X или других платформах, вы будете как дома.

В Kali Linux и Ubuntu вам нужно добавить к команде префикс sudo, чтобы запустить её с правами root. Пользователь «root» на платформах UNIX имеет полный доступ к системе, как пользователь «Администратор» в Windows. Ваша файловая система Windows в среде оболочки Bash находится в /mnt/c.

Связанная статья: Что такое sudo

Используйте те же команды терминала Linux, которые вы использовали для передвижения. Если вы привыкли к стандартной командной строке Windows с её командами DOS, вот несколько основных команд, общих для Bash и Windows:

Связанная статья: Азы работы в командной строке Linux (часть 1), а также последующе части

Важно помнить, что, в отличие от Windows, оболочка Bash и её среда, имитирующая Linux, чувствительны к регистру. Другими словами, «File.txt» с большой буквы отличается от «file.txt» без заглавной буквы.

Дополнительные инструкции смотрите в серии наших руководств Азы работы в командной строке Linux для начинающих.

Вам нужно будет использовать команду apt для установки и обновления программного обеспечения среды Debian, Kali Linux, Ubuntu. Не забудьте указать перед этими командами префикс sudo, чтобы они запускались от имени пользователя root — Linux-эквивалента Администратора. Вот команды apt, которые вам нужно знать:

Загрузить обновлённую информацию о доступных пакетах:

Установитm пакет приложения (замените «ИМЯ-ПАКЕТА» на имя пакета):

Удаление пакета приложения (замените «ИМЯ-ПАКЕТА» на имя пакета):

Поиск доступных пакетов (замените СЛОВО словом, по которому нужно искать пакеты в именах и описаниях):

Загрузите и установите последние версии установленных пакетов:

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

После того, как вы загрузили и установили приложение, вы можете ввести его имя в запросе, а затем нажать Enter, чтобы запустить его. Дополнительную информацию смотрите в документации к конкретному приложению.

Источник

Лучшие терминалы Linux и bash-редакторы, доступные онлайн

Перевод статьи «Best Online Linux Terminals and Online Bash Editors».

Возможно, вы хотели бы попрактиковаться в использовании команд Linux или просто протестировать свои скрипты. Все это можно сделать при помощи онлайн-терминалов Linux и компиляторов bash.

В частности, пользоваться такими онлайн-сервисами удобно, если у вас на машине стоит Windows. Конечно, можно установить Linux на виртуальной машине, но зачастую удобнее просто воспользоваться онлайн-терминалом.

Но где найти бесплатную консоль Linux? Какие оболочки Linux можно использовать онлайн?

Об этом не беспокойтесь! Чтобы помочь вам с выбором, мы собрали список лучших онлайн-терминалов Linux и отдельный список лучших bash-компиляторов.

Примечание: все онлайн-терминалы поддерживают разные браузеры, включая Google Chrome, Mozilla Firefox, Opera и Microsoft Edge.

Лучшие онлайн-терминалы для отработки команд Linux

В первой части мы рассмотрим онлайн-терминалы. Это веб-сайты, позволяющие запускать в браузерах обычные команды Linux (например, с целью проверки). В некоторых случаях для сохранения сессий может потребоваться регистрация и вход на сайт.

1. JSLinux

JSLinux предлагает не просто терминал. Он больше похож на полномасштабный Linux-эмулятор. Как следует из названия, он написан полностью на JavaScript.

При заходе на сайт вам нужно выбрать онлайн-систему Linux — графическую или консольную. Для отработки команд подойдет консольная.

Чтобы иметь возможность коннектиться к своему аккаунту, придется зарегистрироваться.

JSLinux также позволяет загружать файлы в виртуальную машину. В основе этого терминала лежит Buildroot — вспомогательный инструмент для создания Linux-среды для встроенных систем.

2. Copy.sh

Copy.sh предлагает один из лучших онлайн-терминалов Linux и, таким образом, быстрый и надежный способ тестировать и запускать команды Linux.

Вы можете найти Copy.sh на GitHub. Мейнтейнеры продолжают активно работать над проектом, а это хороший знак. Copy.sh поддерживает разные операционные системы, включая

3. Webminal

Webminal это впечатляющий онлайн-терминал Linux, отлично подходящий для новичков, желающих попрактиковаться в использовании команд.

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

4. Tutorialspoint Unix Terminal

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

Но кроме самих руководств Tutorialspoint предоставляет бесплатную онлайн-консоль Linux, чтобы вы могли отрабатывать применение команд, о которых читаете. Вам также дается возможность загрузки файлов.

Это довольно простой и при этом эффективный онлайн-терминал. Но если он вас чем-то не устроит, на странице Coding Ground можно посмотреть список других терминалов, доступных онлайн.

5. JS/UIX

JS/UIX это еще один Linux-терминал, доступный онлайн и написанный полностью на JavaScript, без всяких плагинов. Он содержит виртуальную Linux-машину, виртуальную файловую систему, оболочку и т. д.

Чтобы посмотреть список реализованных команд, обратитесь к странице руководства.

6. CB.VU

Если хотите протестировать команды для стабильной версии FreeBSD 7.1, cb.vu будет самым простым решением.

В нем нет ничего замысловатого. Вы просто вводите команды, которые хотите испытать, и получаете их вывод. К сожалению, здесь нет возможности загрузки файлов.

7. Linux Containers

Linux Containers позволяет вам запускать демо-сервер (с 30-минутным ограничением по времени), который работает как один из лучших онлайн-терминалов Linux. Этот проект фактически спонсируется Canonical.

8. Codeanywhere

Codeanywhere это сервис, предлагающий кросс-платформенные облачные IDE. Но чтобы запустить бесплатную виртуальную машину Linux, вам придется сначала зарегистрироваться, выбрав бесплатный план. Затем нужно будет создать новое соединение и настроить контейнер с нужной операционной системой. После этого бесплатная Linux-консоль будет к вашим услугам.

Лучшие редакторы bash, доступные онлайн

Погодите-ка! А разве терминалы Linux недостаточно хороши для bash-скриптов? Вполне! Но создавать bash-скрипты в редакторах терминала, а затем выполнять их не так удобно, как просто использовать онлайн-редактор bash.

Bash-редакторы из этого списка помогут вам с легкостью писать онлайн shell-скрипты, которые вы сможете сразу же запускать для проверки корректности их работы.

Bash-компилятор Tutorialspoint

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

JDOODLE

Еще один полезный онлайн-редактор для тестирования bash-скриптов называется JDOODLE. Он предлагает также и другие IDE, но мы здесь фокусируемся на bash. На странице редактора вы увидите, собственно, сам редактор, строку для ввода команд и поле для вывода результатов.

Paiza.io

Paiza.io это хороший онлайн-редактор bash, который можно испытать бесплатно. Для использования более продвинутого функционала (например, создания расписания задач) нужно сначала зарегистрироваться.

Paiza.io поддерживает совместную работу в режиме реального времени, но этот функционал пока в экспериментальной фазе.

На paiza.cloud также можно найти онлайн-терминал Linux.

ShellCheck

Это интересный редактор bash, позволяющий находить баги в скриптах. Проект доступен на GitHub. ShellCheck можно установить локально на поддерживаемых платформах.

Rextester

Если вам нужен простейший bash-компилятор, выбирайте Rextester. Он также поддерживает и другие языки программирования.

Learn Shell

Как и Webminal, Learnshell предоставляет ресурсы как для изучения shell-программирования, так и для запуска (испытаний) кода. Обучающие ресурсы раскрывают и базовые, и продвинутые темы.

CoCalc

CoCalc предоставляет онлайн-среду с понятным программным стеком, которой могут пользоваться как профессионалы, так и учащиеся. Есть платная и бесплатная версии. В бесплатной у вас будет ограниченный доступ к функционалу, а также ограничения интернет-доступа. Кроме того, следует быть готовым к посредственной производительности сервера. Но если вы готовы подписаться платно, вы сможете работать над скриптами с коллегами (в режиме реального времени) и делать много всего другого при помощи высокопроизводительного сервера.

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

Мы рассказали вам о самых быстрых и надежных терминалах Linux и bash-редакторах, доступных онлайн. Теперь вы можете смело их изучать, экспериментировать и писать код! Если мы пропустили какой-то интересный онлайн-терминал или редактор, дополняйте наш список в комментариях!

Источник

Bash в Windows 10

Введение

WSL предоставляет возможность запуска родных линуксовых утилит в Windows.

Это стало возможно 2 августа 2016-го года. Когда в результате сотрудничества Microsoft и Canonical стало возможным использовать оригинальный образ ОС Ubuntu 14.04 для непосредственного запуска поверх WSL множества инструментов и утилит из этой ОС без какой-либо виртуализации.

С 6 мая 2019-го года доступна WSL 2, которая работает на Hyper-V

В этой статье вы узнаете как установить WSL. О том как пользоваться командами Bash читайте в статье «Основы Bash»

По состоянию на 2021-й год доступны к установке WSL:

Установка

Когда он влючён можно перейти непосредственно к активации Bash.

Нажимаем клавишу WIN пишем control и переходим в Панель управления
(Control Panel)

Программы и Компоненты
(Programs and Features)

Включение или отключение компонентов Windows
(Turn Windows features on or off)

Подсистема Windows для Linux (бета-версия)
(Windows Subsystem for Linux (Beta))

После перезагрузки нажимаем сочетание клавиш WIN + R и вводим cmd.

В появившейся командной строке пишем bash

Вводим y если нужен русский язык

Вводим новое имя пользователя

Наслаждаемся результатом: теперь для запуска Bash нужно просто ввести эту команду в командной строке

Доступ к флешке из Bash в Windows

Ошибки

Windows Subsystem for Linux has no installed distributions. Distributions can be installed by visiting the Microsoft Store: https://aka.ms/wslstore C:\Users\Andrei>

Установка с сайта aka.ms

Следуем совету и заходим на сайт aka.ms

В первых версиях из коробки шла Ubuntu, поэтому сейчас для разнообразия я выбираю Debian

На следующем шаге я выберу No, thanks

Источник

Установка bash в Windows 10

В этой статье мы рассмотрим как установить оболочку bash для Windows 10. Для этого нам нужно включить подсистему Linux для Windows и установить Ubuntu из Microsoft Store.

Как узнать версию Windows 10

Как включить подсистему Linux для Windows

Для ОС Windows 10 с обновлениями Fall Creators Update (версия 1709) и новее.

Ввести следующую команду:

Нужно будет нажать Y и ваш компьютер будет перезагружен для установки необходимых компонентов.

Для десятки версией ниже 1709

Вкладка Для разработчиков. В ней выбираем Режим разработчика.

Обновление WSL до 2 версии

Перейдите по ссылке пакет обновления ядра Linux в WSL. и скачайте пакет последней версии. Установите его.

Назначим WSL 2 по дефолту, введя следующую команду в PowerShell:

Установка Ubuntu

После того как скачали Ubuntu запустим его. Ждём несколько минут, пока он установится. Далее, нужно придумать пользователя и пароль для системы Ubuntu. При вводе пароля видно его не будет (как будто мы его не вводим).

Далее, для обновления списка пакетов программного обеспечения до последних версий введём следующую команду:

Как установить Nodejs в подсистеме Linux для Windows 10

Далее установим nodejs (на примере 14 версии)

Nodejs в подсистеме Linux системы Windows установлен.

Установка Gulp в подсистеме Linux для Windows 10

Npm: command not found

При ошибке npm: command not found выполните следующую команду:

Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.

Источник

When it comes to developing scripts in the Bash programming language, having the right Integrated Development Environment (IDE) or text editor can significantly boost productivity and efficiency. Bash, which stands for Bourne Again Shell, is a widely used shell scripting language in the Unix and Linux operating systems.

Popular IDEs and Editors for Bash Development: Exploring Features and Tools

This is the part where we explore some popular IDEs and editors for Bash development, along with their key features and tools.

1. Visual Studio Code (VS Code)

Visual Studio Code, developed by Microsoft, has gained immense popularity among developers for its lightweight yet powerful features. It offers built-in support for Bash scripting, including syntax highlighting, code snippets, and debugging capabilities. With the help of extensions from the marketplace, developers can further enhance their Bash development experience by adding linters, task runners, and version control tools.

One of the standout features of VS Code is its integrated terminal, which allows developers to run Bash commands directly within the editor. This seamless integration simplifies the development process and enables quick testing of scripts. Additionally, the ability to customize keybindings, themes, and settings makes VS Code a versatile choice for Bash development.

2. Atom

Atom, an open-source text editor developed by GitHub, is another popular choice for Bash scripting. It offers a clean and intuitive interface with a wide range of customization options. Atom supports various packages and themes, allowing developers to personalize their workflow according to their preferences.

For Bash development, Atom provides features like syntax highlighting, auto-completion, and project management tools. Developers can install packages such as linters, shellcheck, and terminal-plus to enhance their scripting capabilities. The seamless Git integration in Atom facilitates version control and collaboration on Bash projects.

3. Sublime Text

Sublime Text is known for its speed and responsiveness, making it a favorite among developers working on Bash scripts. With a sleek interface and powerful features, Sublime Text offers a smooth coding experience. It supports syntax highlighting for Bash scripts and allows for customizing color schemes and settings.

One of the key features of Sublime Text is its multiple selections feature, which lets developers edit multiple lines of code simultaneously. This feature comes in handy when refactoring or making changes to Bash scripts. Sublime Text also supports plugin installations for additional functionalities such as linting, build systems, and package control.

4. Vim

Vim is a highly configurable text editor favored by many experienced developers for its efficiency and speed. While it has a steep learning curve, Vim offers powerful features and customization options for Bash development. With its modal editing capability, Vim allows developers to navigate and edit code with precision.

For Bash scripting, Vim provides syntax highlighting, auto-indentation, and macros for automating repetitive tasks. Developers can leverage plugins like vim-bash and fugitive for enhanced Bash development tools. Vim’s extensive keybindings and shortcuts enable developers to streamline their workflow and boost productivity.

5. Emacs

Emacs is another feature-rich text editor known for its extensibility and customizability. It offers a range of modes and packages for Bash development, making it a versatile choice for scripting tasks. Emacs provides syntax highlighting, smart indentation, and code navigation features for working on Bash scripts.

With its built-in terminal emulator, Emacs allows developers to run Bash commands directly within the editor. The ability to customize keybindings and workflows in Emacs enables developers to tailor the editor to their specific needs. By installing packages like shell-command, flycheck, and magit, developers can enhance their Bash scripting experience in Emacs.

Choosing the right IDE or text editor for Bash development is crucial for optimizing the scripting workflow and achieving efficient coding practices. Whether you prefer a lightweight and customizable editor like VS Code or a feature-rich powerhouse like Emacs, each tool offers unique features and tools to enhance your Bash scripting experience.

By exploring the popular IDEs and editors mentioned in this article, developers can find the perfect fit for their Bash development needs. With the right tools at their disposal, developers can write, test, and debug Bash scripts with ease, ultimately improving their productivity and code quality.

Top IDEs and Editors for Bash Development

1. Visual Studio Code

Visual Studio Code, commonly referred to as VS Code, is a versatile and powerful code editor developed by Microsoft. It supports a wide range of programming languages, including bash scripting. With features like IntelliSense, debugging capabilities, and extensions for customizing your workflow, VS Code is a favorite among developers working on bash scripts. Its user-friendly interface and robust plugin ecosystem make it an excellent choice for both beginners and advanced users.

2. Sublime Text

Sublime Text is another popular code editor known for its speed and simplicity. It offers a distraction-free writing experience with features like multiple selections, command palette, and a wide variety of plugins to enhance functionality. Sublime Text’s minimalist design and fast performance make it a top choice for developers working on bash scripts or any other programming language.

3. Atom

Atom is an open-source IDE developed by GitHub that is highly customizable and perfect for bash development. It comes with built-in Git integration, smart autocompletion, and a package manager for installing additional features. Atom’s sleek interface and powerful customizability make it a great option for developers looking for a flexible and efficient tool for bash scripting.

4. Emacs

Emacs is a highly extensible text editor that has been around for decades and is still widely used by programmers today. With its powerful scripting capabilities and a plethora of plugins available, Emacs is a favorite among bash developers who prefer a more customizable and feature-rich environment. While Emacs has a steep learning curve, mastering it can greatly boost productivity and efficiency in bash scripting.

5. Vim

Vim is a highly configurable text editor built for efficiency and speed. It comes with a steep learning curve but offers unmatched productivity once mastered. Vim’s modal editing system and extensive customization options make it a popular choice for developers working on bash scripts. With features like syntax highlighting, auto-completion, and split windows, Vim is a robust tool for proficient users.

Choosing the right IDE or editor for bash development is crucial for software developers looking to improve their coding proficiency and productivity. Whether you prefer a robust IDE like Visual Studio Code or a lightweight editor like Sublime Text, finding a tool that resonates with your workflow can greatly enhance your scripting experience. Consider experimenting with different IDEs and editors to find the one that best suits your needs and preferences.

Are you looking for professional software development services to help streamline your coding projects? Contact us today to learn more about our solutions tailored to meet your specific requirements.

Exploring Popular IDEs and Text Editors for Bash Development

This is the part where we explore some of the popular choices among developers for bash development.

1. Visual Studio Code

Visual Studio Code, commonly known as VS Code, is a widely used and highly customizable IDE developed by Microsoft. It offers great support for bash scripting with features like syntax highlighting, code completion, and debugging capabilities. With a large extension library, developers can enhance their bash script development experience with additional tools and plugins.

2. Sublime Text

Sublime Text is a lightweight and fast text editor that is popular among developers for its speed and ease of use. It offers a clean interface with powerful features like multiple cursors, command palette, and extensive plugin support. Sublime Text is a great choice for bash script development due to its simplicity and extensibility.

3. Atom

Atom is an open-source text editor developed by GitHub with a focus on hackability and customizability. It comes with a built-in package manager and a vast library of plugins to enhance the development experience. Atom provides excellent support for bash scripting with features like smart autocompletion, file navigation, and customizable themes.

4. Vim

Vim is a highly configurable text editor that has been around for decades and is favored by many experienced developers for its efficiency and speed. It comes with a steep learning curve but offers powerful features like modal editing, macros, and scriptable plugins. Vim is a great choice for developers who prefer a minimalistic yet highly customizable environment for bash scripting.

5. Emacs

Emacs is another popular text editor that has a strong following among developers for its extensibility and customizability. It comes with a built-in scripting language (Emacs Lisp) that allows for the creation of custom features and extensions. Emacs offers features like syntax highlighting, autocompletion, and project navigation, making it a versatile choice for bash script development.

6. Nano

Nano is a simple and user-friendly command-line text editor that is commonly available on Unix-based systems. While it may not have as many features as some of the other IDEs and text editors mentioned above, Nano is a great choice for quick edits and simple bash script development tasks. It offers basic functionalities like syntax highlighting and line numbering, making it suitable for beginners and casual users.

Choosing the right IDE or text editor for bash development is a personal preference based on individual workflow and requirements. Whether you prefer a feature-rich IDE like Visual Studio Code or a minimalist text editor like Vim, the important thing is to find a tool that helps you write and debug bash scripts efficiently. Experiment with different IDEs and editors to find the one that best suits your coding style and enhances your productivity as a bash script developer.


less than 1 minute read

Introduction

I’ve had a few colleagues ask me how I have a full featured Bash IDE for courses I have developed; So I thought i’d make a post to show people how to do it.

Features

Back to table of contents

Requirements

  1. Ubuntu 18.04 +
  2. Snap
  3. VSCode V 1.4.5+ standard vscode version on snap store (See Issue 133 under bash-debug)

Back to table of contents

Instructions

  • Open your Extentions in vscode and search for bash

  • Select Bash debug, then select install
    • Open your debug tab, and select create a launch.json file

    • Select Bash Debug

      debug2.png

    • Customise your launch.jsonfile and add a comma to the end of line 11 (Program line) and create a new line with "terminalKind": "Integrated"

      debug3.png

      • this will enable you to use stdin on the integrated vscode terminal
  • Select Bash IDE, then select install

  • Install the shellcheck ubuntu package (Pre-Requisite for vscode extension)

    • sudo apt install shellcheck
  • Search for Shellcheck, select it, then select install

    • Once shell check is installed click on the settings cog, and select extension settings

      extentionsettings.png

    • Enable the quick fix feature

      quickfix.png

  • Your good to go :-) happy scripting

Back to table of contents

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Установка windows в балашихе
  • Usbprint canonlbp3010 lbp30188748 для windows 10 64 bit
  • Как отрегулировать микрофон на компьютере windows 10
  • Простой фоторедактор для windows 10 бесплатный
  • Восстановление windows 7 x64 professional