Command-not-found

From Rosalab Wiki
Jump to: navigation, search

You can often see a message «bash: foo: command not found». And you surely want to know why. For example, necessary package is not installed or there is just a misprint. Probably many users become confused after this:

 $ rpmbuild
 bash: rpmbuild: command not found
 $ sudo urpmi rpmbuild
 No package named rpmbuild
 The following packages contain rpmbuild: java-rpmbuild,    rpmbuildupdate
 You should use "-a" to use all of them

For such cases “command-not-found” tool has been created for ROSA! There are similar tools in other distributions, but there was no such tool for ROSA/Mandriva up to now. But from now on, all you need is to install command-not-found package and open new terminal. Try to type something weird:

 $ foo
  No command 'foo' found, did you mean:
   Command 'fio' from package 'fio' (contrib)
   Command 'fop' from package 'fop' (main, installed)
   Command 'for' from package 'execline' (contrib)
   Command 'zoo' from package 'zoo' (restricted)

Perfect! I just wanted to call “zoo”, I made a mistake. (By the way, notice that “fop” package is already installed, but now we don’t need it)

  $ zoo
  Command 'zoo' can be found in:
     package 'zoo' (restricted)
  You can install it by typing:
     urpmi zoo
 Do you want to install it? (y/N)

All you need is to type “y”. You don’t want to receive an offer to install a package? Set environment variable “COMMAND_NOT_FOUND_TURN_OFF_INSTALL_PROMPT=1”, and there will be no stupid questions.

It should be mentioned that when you run the program without the help of TTY, it won’t execute any check, it will just write “command not found” like bash itself. Also whatever command-not-found writes, it will exit with code 127, as bash does in such cases.

One more command-not-found feature is analysis of installed packages. If you type

   $ ifconfig
  Command 'ifconfig' can be found in:
     package 'net-tools' (main, installed)
 File /sbin/ifconfig exists! Check your PATH variable, or call it using an absolute path.

Also “cnf” utility presents in command-not-found. It allows doing everything that is described above (in fact, it is executed every time bash fails to run command). In other words, "cnf foo" will give you the same output, as when you type “foo” in console. You can use “cnf” to learn from which package an installed program came.

Probably you have already installed command-not-found. Did you notice that there was another one package installed — command-not-found-data. This package contains data base (JSON format file) from which information is taken while cnf is working. As repositories are always changing, it is necessary to update information of this base from time to time. That is why this package is rebuilt with actual data once a week and comes to you with other updates.

We hope that your work with console will become more pleasant :)

[ List view ]Comments

Hi, I've used the urpm tools for over 13 years. I'd say 'cnf' looks like a very good extension to these tools. Thanks! Rolf

Please login to comment.