🐛 Типичные ошибки — Занятие 26

К оглавлению урока

⚡ Топ ошибок

  • for без точки с запятой: for i in {1..10} без ; перед do → синтаксическая ошибка
  • tail +2 vs tail -n +2: tail +2 работает как GNU-расширение, но переносимо: tail -n +2
  • vi/nano: не выйти с сохранением — классическая ловушка
  • PR в неверном направлении — base должен быть оригинальный репозиторий, compare — ваш форк

Ошибки из ДЗ 24 (sleeper.sh) — из источника

Ошибка 1: Синтаксические ошибки в for-цикле

Из источника: часто встречаются синтаксические ошибки при написании цикла for i in {1..10}.

Неправильно:
# Забыли точку с запятой перед do:
for i in {1..10}
do date +"%H:%M:%S"  # это может сработать
done

# Но эта форма — синтаксическая ошибка:
for i in {1..10}; date +"%H:%M:%S"; done  # нет do!
Правильно:
# Вариант 1: точка с запятой на той же строке
for i in {1..10}; do
    date +"%H:%M:%S"
    sleep 2
done

# Вариант 2: do на следующей строке
for i in {1..10}
do
    date +"%H:%M:%S"
    sleep 2
done

Ошибка 2: tail +2 — не пропускаем заголовок

Из источника: ps -ef | tail +2 | wc -l — не всегда очевидно, что tail +2 начинает вывод со 2-й строки (пропускает заголовок ps).

Что делает tail +2:
ps -ef | tail +2 | wc -l
# tail +2 = начать вывод со строки номер 2
# то есть ПРОПУСТИТЬ первую строку (заголовок)
# wc -l = посчитать строки = количество процессов
Переносимый вариант (рекомендован):
ps -ef | tail -n +2 | wc -l
# -n +2 — переносимый синтаксис для GNU/BSD систем

Ошибка 3: Синтаксис диапазона {50..100}

Из источника: не всегда очевидно, что можно начать с 50 и до 100.

Bash диапазоны:
for j in {50..100}; do   # от 50 до 100 включительно (51 итерация)
    touch "$j.txt"
done

for run in {a..z}; do   # буквенный диапазон
    echo $run
done

for i in {1..10..2}; do  # с шагом 2: 1 3 5 7 9
    echo $i
done

Ошибка 4: Выход из vi и nano

Из источника: «Использование текстовых редакторов — не всегда получается выйти с сохранением».

Редактор Действие Команда
vi / vim Сохранить и выйти Esc:wq → Enter
vi / vim Выйти без сохранения Esc:q! → Enter
vi / vim Режим вставки (редактирование) Клавиша i
nano Сохранить и выйти Ctrl+XY → Enter
nano Выйти без сохранения Ctrl+XN

Ошибки из ДЗ 25 (PR в PyCharm)

Ошибка 5: PR в неверном направлении

Неправильно: base — ваш форк, compare — оригинальный репозиторий
Правильно:
  • base repository: it-career-hub/learning_git (оригинал), ветка main
  • head repository: ваш форк, ветка andrew-hw16
Изменения идут ИЗ вашего форка В оригинал, а не наоборот.

Ошибка 6: Commit без Push

Коммит существует только локально. PR на GitHub создать нельзя — GitHub не видит ваши локальные коммиты. После коммита обязательно выполните Push: git push origin andrew-hw16 или нажмите «Push» в PyCharm.

Ошибка 7: Ветка создана, но PR из main

Задание требует PR из ветки andrew-hw16, а не из main. При создании PR убедитесь, что в поле «compare» выбрана именно ваша ветка с HW16.

Ошибка 8: Отставание форка от upstream

Если форк создан давно, он может отставать от оригинала. Перед работой обновите:

git remote add upstream https://github.com/it-career-hub/learning_git.git
git fetch upstream
git checkout master
git merge upstream/master
git push origin master