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