EMZETT.
Увійти

command not found (bash і zsh)

Коротко: Оболонка не знаходить введену програму ні в теках PATH, ні як вбудовану команду.

Докладніше: Повідомлення: bash: foo: command not found або zsh: command not found: foo. Оболонка шукає програми в теках змінної середовища PATH. Якщо команду там не знайдено, з’являється ця помилка (код виходу 127).

Подробиці

Причини

  • Друкарська помилка в команді (gti замість git).
  • Програму не встановлено.
  • Вона встановлена, але її тека не в PATH (наприклад, ~/.local/bin, /usr/local/bin, ~/.cargo/bin).
  • Скрипт у поточній теці викликається без ./.
  • Після встановлення термінал не було перезапущено.
  • Неправильний рядок shebang (#!/bin/bsh) або закінчення рядків Windows (\r) у скрипті.

Рішення

  1. Перевірте написання та доповніть клавішею Tab.
  2. Встановіть: sudo apt install імяпакета (або менеджер пакетів вашого дистрибутива). Оболонка часто вже дає підказки (пакет command-not-found).
  3. Перевірте шлях: echo $PATH, which команда, type команда.
  4. Додайте до PATH (у ~/.bashrc або ~/.zshrc): export PATH="$HOME/.local/bin:$PATH", потім source ~/.bashrc.
  5. Власний скрипт: викликайте ./script.sh, робіть виконуваним через chmod +x script.sh.
  6. За закінчень рядків \r: dos2unix script.sh.

Примітка

Ніколи не ставте . (поточну теку) на початок PATH: зловмисник міг би підсунути файл зі звичайною назвою команди. У Windows аналогічне повідомлення виглядає так: «The term … is not recognized as the name of a cmdlet …» або «… is not recognized as an internal or external command …».

Див. також: Код виходу 126/127, Permission denied, bash