Как я могу учить bash в Ubuntu некоторым проклятиям?

Когда bash встречает неизвестную команду (слово?), она делает это:

The program 'hello' can be found in the following packages:
 * hello
 * hello-debhelper
Try: sudo apt-get install <selected package>

то, что я хотел бы знать, - это то, как это делается, поэтому я могу отредактировать его или добавить что-то перед этим, чтобы пересечь проверьте неизвестное слово из словаря, выращенного в домашних условиях, который будет иметь фразу: пары ответов, которые затем могут быть отправлены на вывод.

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

И да, я делаю это каждый раз, когда я печатаю wtf, когда программа терпит неудачу, я хочу, чтобы что-то хорошее отбросило назад ...

21
задан 28 October 2011 в 22:43

17 ответов

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
20
ответ дан 25 May 2018 в 17:28
  • 1
    Мне нравится этот подход. – ændrük 28 October 2011 в 23:00
  • 2
    Вау! Мне понравилась идея alias_function :-) – anishsane 28 May 2013 в 10:00
  • 3
    Чтобы просмотреть / проверить текущее определение, выполните: declare -p -f command_not_found_handle – Randall 22 September 2017 в 23:06

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
21
ответ дан 4 August 2018 в 18:26

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
21
ответ дан 6 August 2018 в 02:53

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
21
ответ дан 7 August 2018 в 20:33

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
21
ответ дан 10 August 2018 в 08:54

Посмотрите на /etc/bash.bashrc для определения функции command_not_found_handle.

Если вы хотите удалить это поведение, поместите это в свой .bashrc

[[ $(type -t command_not_found_handle) = "function" ]] && 
  unset -f command_not_found_handle

Если вы хотите настроить, вы можете сделать

# see http://stackoverflow.com/questions/1203583/how-do-i-rename-a-bash-function
alias_function() {
  eval "${1}() $(declare -f ${2} | sed 1d)"
}

alias_function orig_command_not_found_handle command_not_found_handle 

command_not_found_handle() {
  command=$1
  shift
  args=( "$@" )

  do your stuff before
  orig_command_not_found_handle "$command" "${args[@]}"
  do your stuff after
}
21
ответ дан 15 August 2018 в 21:41

Это может быть потенциально полезно ...

Не найденный пакет - это то, что дает вам магический ответ. Я не уверен, можно ли его настроить, но это может стоить взгляда.

Еще один способ сделать то, что я думаю, что вы пытаетесь сделать, это добавить к вам псевдоним. bashrc, который печатает сообщение всякий раз, когда вы вводите «wtf» или что-то в этом роде:

alias wtf='echo "chill out man"'

Добавьте это в свой файл ~ / .bashrc, а затем выполните: source $HOME/.bashrc

[d5 ] Затем это будет просто печатать сообщение всякий раз, когда вы вводите wtf в свой терминал. Вы также можете сделать этот псевдоним вызовом сценария, который печатает более подробное сообщение или что-то подобное. Возможности бесконечны!

4
ответ дан 25 May 2018 в 17:28

Это поведение определено в системном файле конфигурации Bash, /etc/bash.bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
  function command_not_found_handle {
    # check because c-n-f could've been removed in the meantime
    if [ -x /usr/lib/command-not-found ]; then
      /usr/bin/python /usr/lib/command-not-found -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

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

[ f2]
3
ответ дан 25 May 2018 в 17:28

@ user606723, если вы хотите полностью избавиться от этого поведения:

sudo apt-get remove command-not-found command-not-found-data 

Если это не работает, попробуйте следующее:

sudo apt-get purge command-not-found command-not-found-data 

If вы хотите вернуть поведение:

sudo apt-get install command-not-found
0
ответ дан 25 May 2018 в 17:28

@ user606723, если вы хотите полностью избавиться от этого поведения:

sudo apt-get remove command-not-found command-not-found-data 

Если это не работает, попробуйте следующее:

sudo apt-get purge command-not-found command-not-found-data 

Если вы хотите вернуть поведение:

sudo apt-get install command-not-found
0
ответ дан 25 July 2018 в 20:56

Это поведение определено в системном файле конфигурации Bash, /etc/bash.bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
  function command_not_found_handle {
    # check because c-n-f could've been removed in the meantime
    if [ -x /usr/lib/command-not-found ]; then
      /usr/bin/python /usr/lib/command-not-found -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

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

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
3
ответ дан 31 July 2018 в 11:38

Это поведение определено в системном файле конфигурации Bash, /etc/bash.bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
  function command_not_found_handle {
    # check because c-n-f could've been removed in the meantime
    if [ -x /usr/lib/command-not-found ]; then
      /usr/bin/python /usr/lib/command-not-found -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

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

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
3
ответ дан 2 August 2018 в 02:39

@ user606723, если вы хотите полностью избавиться от этого поведения:

sudo apt-get remove command-not-found command-not-found-data 

Если это не работает, попробуйте следующее:

sudo apt-get purge command-not-found command-not-found-data 

Если вы хотите вернуть поведение:

sudo apt-get install command-not-found
4
ответ дан 4 August 2018 в 18:26

Это поведение определено в системном файле конфигурации Bash, /etc/bash.bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
  function command_not_found_handle {
    # check because c-n-f could've been removed in the meantime
    if [ -x /usr/lib/command-not-found ]; then
      /usr/bin/python /usr/lib/command-not-found -- "$1"
      return $?
    elif [ -x /usr/share/command-not-found ]; then
      /usr/bin/python /usr/share/command-not-found -- "$1"
      return $?
    else
      return 127
    fi
  }
fi

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

function command_not_found_handle {
  echo "Sorry, smotchkiss, try again."
}
3
ответ дан 6 August 2018 в 02:53

@ user606723, если вы хотите полностью избавиться от этого поведения:

sudo apt-get remove command-not-found command-not-found-data 

Если это не работает, попробуйте следующее:

sudo apt-get purge command-not-found command-not-found-data 

Если вы хотите вернуть поведение:

sudo apt-get install command-not-found
4
ответ дан 7 August 2018 в 20:33

@ user606723, если вы хотите полностью избавиться от этого поведения:

sudo apt-get remove command-not-found command-not-found-data 

Если это не работает, попробуйте следующее:

sudo apt-get purge command-not-found command-not-found-data 

Если вы хотите вернуть поведение:

sudo apt-get install command-not-found
4
ответ дан 10 August 2018 в 08:54

Это может быть потенциально полезным ...

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

Еще одна возможность сделать то, что я думаю, что вы пытаетесь сделать, это добавить к вам псевдоним. bashrc, который печатает сообщение всякий раз, когда вы вводите «wtf» или что-то в этом роде:

alias wtf='echo "chill out man"'

Добавьте это в свой файл ~ / .bashrc, а затем выполните: source $HOME/.bashrc

Затем это будет просто печатать сообщение всякий раз, когда вы вводите wtf в свой терминал. Вы также можете сделать этот псевдоним вызовом сценария, который печатает более подробное сообщение или что-то подобное. Возможности бесконечны!

4
ответ дан 19 August 2018 в 00:07

Другие вопросы по тегам:

Похожие вопросы: