On a Linux system, what is /bin/true? What is it used for?
- 34,080
- 14
- 96
- 122
- 30,904
- 60
- 142
- 212
-
/foo/bar || true (works if /bin/true) is in the path. While not labeled as such, this question does explain something that is useful in shell scripts, makefiles, etc.. thus not voting to close. – Tim Post Feb 01 '10 at 14:16
-
http://forums.thedailywtf.com/forums/t/3779.aspx – Colin Pickard Jul 22 '11 at 16:02
-
You may want to have a look at [the source code of them](https://askubuntu.com/questions/454117/why-is-bin-true-such-a-large-file-how-would-i-find-the-source-code); since I was curious. – Константин Ван Jun 07 '17 at 05:42
6 Answers
/bin/true is a command that returns 0 (a truth value in the shell).
Its purpose is to use in places in a shell script where you would normally use a literal such as "true" in a programming language, but where the shell will only take a command to run.
/bin/false is the opposite that returns non-zero (a false value in the shell).
- 38,637
- 12
- 58
- 67
From the man page:
true - do nothing, successfully
true returns a status 0.
- 111,086
- 29
- 224
- 214
- 1,905
- 11
- 8
-
45SyaZ: You may also be amused by the description of `false(1)`: "do nothing, unsuccessfully". – camh Feb 02 '12 at 10:49
Note, it's not just silly or visually nice. It helps for example to exit a program without activating the end handlers which might mess up when doing multi threading or forked programs. Like in perl:
#!/usr/bin/env perl
exec "/bin/true";
END {
print "This wont get printed .. would have if I just 'exit' or 'die'\n";
}
- 91
- 1
- 1
I've seen it used to fool a system operation into thinking a command has run when it hasn't. If a command is faulty eg looping, you can replace it with a symlink to 'true' to get the master job to run. Only a good idea if the job replaced isn't essential.
- 21
- 1
Simply saying its a program returning 0. Sometimes we need to get this value to let the script more readable. It is usually used when you need to use a command for a true value.
- 5,503
- 5
- 45
- 47
In the UNIX shells, it's used for the same purposes as boolean constants true and false in any other language.
while true; do
something
done
flag=true
...
if $flag; then
something
done
- 354
- 3
- 4