каждый. Я пользователь bash/zsh (Linux). Я хочу реализовать следующие вещи.

Сначала введите команду в оболочке bash/zsh, например:

$ чудесно:

На самом деле, программа с именем "чудесно:" не существует. Я хочу иметь дело со строкой ввода с функцией (или программой) до того, как оболочка выполнит команду. Точнее говоря, когда командный ввод «чудесный», оболочка доставляет ввод моей функции / программе, и это все, что делает оболочка.

Существует ли способ реализовать такую вещь? Либо bash, либо zsh - это нормально. Большое спасибо за ваше внимание!

2 ответа2

2

Вы можете определить функцию с именем command_not_found_handle которая будет вызываться всякий раз, когда введенная команда не найдена. Это поддерживается в bash 4.0 или новее; Эквивалентной функцией zsh является аналогично названный command_not_found_handler .

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

command_not_found_handle () {
    if [[ $1 == pirntf ]]; then
        printf "${@:2}"
    else
       printf "Command not found: $1"
       return 127
    fi
}
1

Может быть, вам нужен псевдоним Bash. Псевдоним позволяет вам определить «замечательный», как если бы это была команда. Смотрите учебник. Например, вы можете добавить:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# -> Prevents accidentally clobbering files.
alias mkdir='mkdir -p'

в ваш файл ~/.bashrc.

В вашем случае вы можете псевдоним "замечательно" для сценария, который обрабатывает параметры или ввод, а затем вызывает какую-то другую команду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .