Why does /bin contain binaries for builtins?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Why does /bin contain binaries for builtins?
# 1  
Old 01-20-2011
Why does /bin contain binaries for builtins?

Why do shell builtins like echo and pwd have binaries in /bin? When I do which pwd, I get the one in /bin. that means that I am not using the builtin version? What determines which one gets used? Is the which command a definitive way to determine what is being run when I enter pwd?
# 2  
Old 01-20-2011
Use the "type" command. The "which" command just searches down the current PATH.
Code:
type pwd
pwd is a shell builtin
type /usr/bin/pwd
/usr/bin/pwd is /usr/bin/pwd

You can override the Shell builtin by specifying the full path to the binary e.g. " /usr/bin/pwd".
There can be subtle differences when you are in a directory which is soft-linked to another directory. Try it.

Code:
# HP-UK with Posix Shell
ls -lad /usr/tmp
lrwxrwxrwt   1 root       sys              8 May  7  2003 /usr/tmp -> /var/tmp
cd /usr/tmp
pwd
/usr/tmp

/usr/bin/pwd
/var/tmp

# 3  
Old 01-20-2011
if your shell has a builtin (e.g. 'echo'), the builtin will used (if you don't specify explicitly the path to the utility).
The shells that don't have support for the builtins (Bourne Shell), use the $PATH to find the executable (if the absolute/relative paths are not specified).

In ksh you can use 'whence echo' to see what the shell uses - non-pathed results of 'whence' mean the builtins.
# 4  
Old 01-20-2011
They're present because your system may have multiple shells available, not all of which have every possible builtin. They're failsafes, more or less.
# 5  
Old 01-20-2011
Interesting, thanks!
# 6  
Old 01-20-2011
Some implementations of unix insist that you use the Shell version even if you specify a path. When this happens, specifying the path just slows the script down.

On HP-UX "/usr/bin/cd" is actually a Posix Shell script.
There are another 100+ "binaries" in /usr/bin that are actually Posix Shell scripts.

Therefore where you want alternative functionality by using absolute paths it is worth checking whether the absolute path version isn't just a Shell script!
# 7  
Old 01-20-2011
I noticed PWD was an elf executable in this instance on my machine, but I am sure you are right that some of them are just scripts.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Usage of #!/bin/sh vs #!/bin/bash shell scripts?

Some question about the usage of shell scripts: 1.) Are the commands of the base shell scripts a subset of bash commands? 2.) Assume I got a long, long script WITHOUT the first line. How can I find out if the script was originally designed für "sh" or "bash"? 3.) How can I check a given... (3 Replies)
Discussion started by: pstein
3 Replies

2. AIX

Redistribution bin required for AIX. j7r164redist.7.1.0.25.bin

Hi, I am planning to install a version of Informatica on my AIX box. It requires a specific java build in pap6470_27sr2-20141101_01(SR2). The current link for IBM 64-bit SDK for AIX®, JavaTM Technology Edition, Version 7 Release 1 has a more recent version in j7r164redist.7.1.0.75.bin. Is... (4 Replies)
Discussion started by: meetpraveens
4 Replies

3. UNIX for Dummies Questions & Answers

Shell and bash builtins...

Not sure if this is the right forum but I have collated a listing of shell and bash builtins. Builtins is a loose word and may include the '/bin' drawer/folder/directory but NOT any others in the path list. In the case of my Macbook Pro, OSX 10.7.5 the enabled internals is also listed... ... (1 Reply)
Discussion started by: wisecracker
1 Replies

4. Solaris

What is the difference between xpg4/bin and usr/bin?

Hi Experts, I found that the same commands(sort, du, df, find, grep etc.) exists in both dir. What is the difference to use them? i.e: to use xpg4/bin/grep and usr/bin/grep My OS version is SunOS 5.10 Regards, Saps (7 Replies)
Discussion started by: saps19
7 Replies

5. OS X (Apple)

When to use /Users/m/bin instead of /usr/local/bin (& whats the diff?)?

Q1. I understand that /usr/local/bin means I can install/uninstall stuff in here and have any chance of messing up my original system files or effecting any other users. I created this directory myself. But what about the directory I didn't create, namely /Users/m/bin? How is that directory... (1 Reply)
Discussion started by: michellepace
1 Replies

6. UNIX for Advanced & Expert Users

Writing Custom Builtins for KSH93

I am looking to create some ksh93 extensions using the custom builtin feature. I can successfully create a builtin function, load it using the builtin -f command and get an output. However, I want to get/set values of KSH variables from within my built-in. For example, lets say I am creating... (2 Replies)
Discussion started by: a_programmer
2 Replies

7. Programming

pthread_mutex_lock in ANSI C vs using Atomic builtins of GCC

I have a program which has 7-8 threads, and lots of shared variables; these variables (and also they may not the primitive type, they may be enum or struct ), then they may read/write by different threads at the same time. Now, my design is like this, typedef unsigned short int UINT16;... (14 Replies)
Discussion started by: sehang
14 Replies

8. Shell Programming and Scripting

program name and function name builtins

Hi Is there a way to get the program/script name or function name usng built ins. Like in many languages arg holds the program name regards (2 Replies)
Discussion started by: xiamin
2 Replies

9. UNIX for Dummies Questions & Answers

fuser: difference with bin/sh and bin/ksh shell script

Hi, I have a problem I don't understand with fuser. I launch a simple shell script mysleep.sh: I launch the command fuser -fu mysleep.sh but fuser doesn't return anything excepted: mysleep: Then I modify my script switching from #!/bin/sh to #!/bin/ksh I launch the command fuser -fu... (4 Replies)
Discussion started by: Peuj
4 Replies

10. UNIX for Dummies Questions & Answers

/bin/sh: /usr/bin/vi: No such file or directory when doing crontab

I just set up an ftp server with Red Hat 5.2. I am doing the work, I'm baby stepping, but it seems like every step I get stuck. Currently, I'm trying to set up a crontab job, but I'm getting the following message: /bin/sh: /usr/bin/vi: No such file or directory. I see that vi exists in /bin/vi,... (3 Replies)
Discussion started by: kwalter
3 Replies
Login or Register to Ask a Question