🐧 Как исправить ошибки и опечатки в предыдущих консольных командах в Linux

Мануал

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

Вы можете просто нажать стрелку ВВЕРХ/ВНИЗ, чтобы вызвать историю команд, найти команду с ошибкой, отредактировать опечатку и снова выполнить ее.

Большинство из нас обычно так и поступают!

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

В этом руководстве мы рассмотрим все возможные способы исправления ошибок в предыдущих консольных командах в Linux и Unix.

Эта статья содержит NSFW (Not Safe For Work), а также необычное слово в некоторых местах. Хотя я слегка замаскировал это слово, я не смог избежать его полностью. Поскольку исключить это слово невозможно, примите мои извинения заранее, если эта статья доставила вам неудобства и если я вас чем-то обидел.

1. Исправление ошибок в предыдущих консольных командах с помощью приложения ‘thef*ck’

Утилитаf*ck используется для исправления ошибок и опечаток в ранее выполненных командах в Linux.

Вы в спешке выполнили команду с опечаткой?

Забыли добавить sudo в команду?

Нет проблем!

Это приложение автоматически покажет исправленную команду (команды) для ранее выполненной команды!!!

Вы можете выбрать правильную команду и нажать ENTER для ее выполнения.

Нет необходимости просматривать историю команд, чтобы вручную исправить опечатку в команде!

Разработчик этого приложения черпал вдохновение из твита и создал это классное приложение.

Оно написано на языке Python.

Это приложение с открытым исходным кодом, и его код находится в открытом доступе на GitHub.

1.1. Установка

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

Убедитесь, что вы установили PiP.

После установки PiP выполните следующую команду для установки, как показано ниже:

$ pip3 install --user thefuck

Это позволит установить последнюю доступную версию.

Он также упакован для многих дистрибутивов Linux и Unix, поэтому вы можете установить его с помощью стандартного менеджера пакетов вашего дистрибутива.

Обратитесь к странице проекта на GitHub (приведена в конце), чтобы узнать, как установить его с помощью менеджера пакетов ОС.

1.2. Конфигурация

Рекомендуется добавить следующую строку в .bash_profile, .bashrc, .zshrc или другой скрипт запуска.

$ nano ~/.bashrc

Добавьте следующую строку:

eval $(thefuck --alias fixthis)

Здесь я использовал ‘fixthis’ в качестве алиаса.

Вы можете использовать в качестве алиаса все, что захотите.

Нажмите Ctrl+o и ENTER, чтобы сохранить файл, и Ctrl+x, чтобы закрыть его.

Выполните следующую команду, чтобы обновить изменения:

$ source ~/.bashrc

1.3. Использование

‘fixthis’ работает на основе набора встроенных правил.

Вы также можете создавать свои собственные правила.

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

Если совпадение найдено, создается новая команда с использованием совпавшего правила и выполняется.

Давайте рассмотрим несколько примеров.

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

$ pacman -Syu

Пример вывода:

error: you cannot perform this operation unless you are root.

Как вы можете видеть, приведенная выше команда выдает ошибку привелегий.

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

Нет необходимости добавлять sudo и выполнять команду заново.

Достаточно выполнить команду ‘fixthis’, как показано ниже:

$ fixthis

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

Если это та команда, которую вы хотите запустить, просто нажмите ENTER для ее выполнения.

Если это не так, нажмите стрелки ВВЕРХ/ВНИЗ, чтобы показать другие предложенные команды.

Аналогично, если вы выполнили команду с неправильным написанием, он исправит орфографическую ошибку и выполнит команду снова.

$ pithon

Пример вывода:

bash: pithon: command not found
$ fixthis
python3 [enter/↑/↓/ctrl+c]

Если вы хотите исправлять команды рекурсивно до достижения успеха, вы можете использовать опцию -r:

$ fixthis -r

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

Если вы чувствуете себя неловко при выполнении этой команды в таких ситуациях, вы можете просто создать алиас (например, please, fixthis), как показано в разделе “Конфигурация” выше.

2. Исправление ошибок в командах с помощью Fix

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

Несмотря на то, что Fix делает то же самое, что и thef*ck, она немного отличается.

Thef*ck силен в синтаксисе, в то время как Fix лучше, когда важен семантический аспект.

Thef*ck не может сказать вам, какой пакет установить, если выполнение скрипта не работает.

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

Она предлагает несколько решений для ошибочных или неправильно написанных команд.

Она использует ИИ Codex от OpenAI, чтобы предложить все возможные решения для исправления ошибок в командах.

Все, что вам нужно сделать, это добавить к команде слово “fix”, и ИИ предложит оптимальные решения.

2.1. Установка Fix в Linux

Установить Fix очень просто!

1. Сначала вам нужно получить доступ к API Codex от OpenAI.

2. И git клонировать репозиторий:

$ git clone https://github.com/tom-doerr/fix.git

Система клонирует содержимое репозитория github проекта в локальную папку с именем ‘fix’.

3. перейдем в каталог ‘fix’:

$ cd fix

4. Добавьте main.py в свой $PATH:

$ cp $PWD/main.py ~/.local/bin/fix

2.2. Использование

Чтобы исправить неправильно набранную команду, просто добавьте ‘fix’ перед командой, как показано ниже:

$ fix mkdir abc/def

Чтобы исправить последнюю команду, просто сделайте:

$ fix !!

3. Исправление неправильно написанных команд Bash с помощью символа Caret

Этот трюк работает только в BASH.

Этот трюк очень прост. Мы просто заменяем неправильно набранное слово на правильное с помощью символа Caret (^).

Допустим, вы хотите создать каталог с помощью команды ‘mkdir’.

Но вы пропустили ‘i’ в команде и ввели вместо нее ‘mkdr’, как показано ниже.

$ mkdr itsecforu
bash: mkdr: command not found

Чтобы исправить опечатку в приведенной выше команде, мы можем просто заменить ‘dr’ на ‘dir’ с помощью символа Caret, как показано ниже:

$ ^dr^dir^

Теперь Bash интерпретирует это как ‘mkdir’, запустит его и выведет результат, как показано ниже.

mkdir itsecforu

4. Исправление опечаток при использовании команды cd

Я часто пытался быстро набирать текст в консоли и в итоге допускал опечатки при использовании команды cd
$ cd Pctures
bash: cd: Pctures: No such file or directory

Я пропущу пару слов при вводе имени каталога.

Чтобы исправить эту неприятность, отредактируйте файл ~/.bashrc:

$ nano ~/.bashrc

Добавьте следующую строку в конце:

shopt -s cdspell

Нажмите Ctrl+o и ENTER для сохранения файла и Ctrl+x для его закрытия.

Выполните следующую команду для обновления изменений:

$ source ~/.bashrc

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

Этот прием имеет некоторые недостатки. Важен регистр и порядок.

Например, если вы используете ‘pctures’ вместо ‘Pctures’, программа не распознает путь.

Здесь я использовал строчную букву ‘p’ для каталога ‘Pictures’.

$ cd pctures
bash: cd: pctures: No such file or directory

Также если вы используете ‘Pctrues’ вместо ‘Pctures’, он все равно не распознает путь к каталогу, даже если вы используете правильный регистр, и сообщает, что нет такого файла или каталога.

$ cd Pctrues
bash: cd: Pctrues: No such file or directory

Здесь я изменил порядок букв в каталоге ‘Pictures’.

Также, если в пути к каталогу не хватает более одной буквы, это не сработает.

Обратите внимание, что этот совет относится только к команде ‘cd’.

Кроме того, этот совет относится только к Bash.

В Fish и Zsh эта функция встроена.

Заключение

Вот несколько способов борьбы с опечатками и ошибками в командной строке в системах Linux и Unix.

 

Добавить комментарий