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