Title: Implement a «Command not found» handler in OpenBSD
       Author: Solène
       Date: 09 March 2021
       Tags: openbsd
       Description: 
       
       # Introduction
       
       On many Linux systems, there is a special program run by the shell
       (configured by default) that will tell you which package provide a
       command you tried to run but is not available in $PATH.  Let's do the
       same for OpenBSD!
       
       # Prerequisites
       
       We will need to install the package pkglocate to find binaries.
       
       ```shell command as root
       # pkg_add pkglocate
       ```
       
       We will also need a file /usr/local/bin/command-not-found executable
       with this content:
       
       ```shell script
       #!/bin/sh
       
       CMD="$1"
       
       RESULT=$(pkglocate */bin/${CMD} */sbin/${CMD} | cut -d ':' -f 1)
       
       if [ -n "$RESULT" ]
       then
           echo "The following package(s) contain program ${CMD}"
           for result in $RESULT
           do
               echo "    - $result"
           done
       else
           echo "pkglocate didn't find a package providing program ${CMD}"
       fi
       ```
       
       # Configuration
       
       Now, we need to configure the shell to run this command when it detects
       an error corresponding to an unknown command.  This is possible with
       bash, zsh or fish at least.
       
       
       ## Bash configuration
       
       Let's go with bash, add this to your bash configuration file
       
       ```bash script
       command_not_found_handle()
       {
           /usr/local/bin/command-not-found "$1"
       }
       ```
       
       ## Fish configuration
       
       ```fish shell script
       function fish_command_not_found
           /usr/local/bin/command-not-found $argv[1]
       end
       ```
       
       ## ZSH configuration
       
       ```zsh shell script
       function command_not_found_handler()
       {
           /usr/local/bin/command-not-found "$1"
       }
       ```
       
       # Trying it
       
       Now that you configured your shell correctly, if you run a command in
       your shell that isn't available in your PATH, you may have either a
       success with a list of packages giving the command or that the command
       can't be found in any package (unlucky).
       
       This is a successful output that found the program we were trying to
       run.
       
       ```Success output
       $ pup
       The following package(s) contain program pup
           - pup-0.4.0p0
       ```
       
       This is a result showing that no package found a program named "steam".
       
       ```Unsuccessful output
       $ steam
       pkglocate didn't find a package providing program steam
       ```