How does CommandNotFound Work?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers How does CommandNotFound Work?
# 1  
Old 10-04-2011
How does CommandNotFound Work?

Usually, when we typed a non-exist command, an error message"command not found" occurs. But, some times shell is smart than this by giving more infomation:
Code:
[alien@ubuntu~/tmp]:)zsh
The program 'zsh' can be found in the following packages:
 * zsh-beta
 * zsh
Ask your administrator to install one of them
-bash: zsh: command not found
[alien@ubuntu~/tmp]:(john
The program 'john' is currently not installed.  To run 'john' please ask your administrator to install the package 'john'
-bash: john: command not found
[alien@ubuntu~/tmp]:(which zsh
[alien@ubuntu~/tmp]:(which john

I find the code
Code:
print >>sys.stderr, _("The program '%s' is currently not installed. ") % command

in /usr/share/pyshared/CommandNotFound/CommandNotFound.py

I am wondering how bash make use of the CommandNotFound.py to print the smart error message?
# 2  
Old 10-04-2011
Unless you've got something weird in your profile that runs python scripts every time you get a command not found error, I suspect that's a python thing and not a bash one.

---------- Post updated at 09:43 AM ---------- Previous update was at 09:40 AM ----------

First hit for 'not found' in man bash:

Code:
       If the name is neither a shell function nor a builtin, and contains  no
       slashes,  bash  searches  each element of the PATH for a directory con-
       taining an executable file by that name.  Bash uses  a  hash  table  to
       remember  the  full pathnames of executable files (see hash under SHELL
       BUILTIN COMMANDS below).  A full search of the directories in  PATH  is
       performed  only  if the command is not found in the hash table.  If the
       search is unsuccessful, the shell searches for a defined shell function
       named command_not_found_handle.  If that function exists, it is invoked
       with the original command and the original command's arguments  as  its
       arguments,  and  the  function's exit status becomes the exit status of
       the shell.  If that function is not defined, the shell prints an  error
       message and returns an exit status of 127.

# 3  
Old 10-04-2011
Here is a good overview of command-not-found: Bash: Handling Command Not Found | Linux Journal.

How it is actually implemented varies by distribution.
# 4  
Old 10-05-2011
Very enlightening, thank you all.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. IP Networking

Discussion at work, would a router work pluging a cable in wan1 and lan1?

hi all. and sorry for the random question, but this sparkled a raging flame-war at work and i want more points of view situation a router, with linux of some sort, dhcp client requesting for ip in wan1 (as usual with wan ports) dhcp server listening in lan1, and assigning ip (as usual... (9 Replies)
Discussion started by: broli
9 Replies

2. Shell Programming and Scripting

My script work on Linux but not work in sunos.

My script work on Linux but not work in sun os. my script. logFiles="sentLog1.log sentLog2.log" intial_time="0 0" logLocation="/usr/local/tomcat/logs/" sleepTime=600 failMessage=":: $(tput bold)Log not update$(tput rmso) = " successMessage="OK" arr=($logFiles)... (7 Replies)
Discussion started by: ooilinlove
7 Replies

3. IP Networking

NIC will not work, but it did work.

I have a client machine that was built and loaded with SCO UNIX 2.1.3, (yes it is old). The machine worked fine on the closed network that I tested on in my shop. I then had to change it to the network that it would be connected to. Below is the host file, router and subnet mask file that I usually... (0 Replies)
Discussion started by: NC user
0 Replies

4. Shell Programming and Scripting

ls -d does not work

Hi falks, I need to dispaly a list of only directories . As it written in the manual ,the command to do it is 'ls -d'. When i issue 'ls -d' i'm getting: tornado.orca.ent:DB10g :/home/oracle/Create_Database > ls -d . Is anyone have any idea why id does not display directories ,or maybe... (11 Replies)
Discussion started by: nir_s
11 Replies

5. Linux

How does it work?

Can anyone explain how Graphic LCD (CSTN / STN) work in Unix... From Graphic file thro driver code to display....? Thanks (1 Reply)
Discussion started by: nat123
1 Replies

6. UNIX for Dummies Questions & Answers

cant get this to work

whoami | grep < $1 | echo $1 trying to write a script that finds out who the user is and then takes occurences of that username from a file that is passed as an argument and then displays it (6 Replies)
Discussion started by: iago
6 Replies

7. UNIX for Advanced & Expert Users

how does this work....

1|foo|bar 2|usa|ll 3|usa|vg 4|usa|vg 5|bar|vg 6|usa|vg 7|usa|ll 8|uk|nn 9|foo|manu|bar 10|uk|bb 11|foo|mm 12|kuwait|jkj 13|kuwait|mm 14|dubai|hh awk '/foo/,/bar/' test_file1----command run at the prompt output should have been the first 3 lines...... 1|foo|bar (1 Reply)
Discussion started by: bishweshwar
1 Replies

8. UNIX for Dummies Questions & Answers

Script doesn't work, but commands inside work

Howdie everyone... I have a shell script RemoveFiles.sh Inside this file, it only has two commands as below: rm -f ../../reportToday/temp/* rm -f ../../report/* My problem is that when i execute this script, nothing happened. Files remained unremoved. I don't see any error message as it... (2 Replies)
Discussion started by: cheongww
2 Replies

9. UNIX for Advanced & Expert Users

how does this work???

can someone tell me the meaning of this commnad, If you want to see a grand total of CPU time for a program when it finishes running, you can use the time command. At the Unix prompt, enter: time java myprog Replace myprog with the name of the program you are running. The following is an... (1 Reply)
Discussion started by: ldpathak
1 Replies

10. Shell Programming and Scripting

Will this work?

I'm trying to check if files already exist in a directory. They have the same basename (exsyctr1), but 4 different extensions. If the files exist, then I make backups of them, then copy them from another directory ($livecomp/data) to the current one ($copycomp/data). If they don't exist, just... (5 Replies)
Discussion started by: Ypnos
5 Replies
Login or Register to Ask a Question