While executing a C program, a.out
, using the Ubuntu terminal, why do I always need to type ./
before a.out
, instead of just writing a.out
? Is there solution for this?
Ubuntu – need to type `./` before executing a program in the current directory
bashcommand line
Related Question
- Ubuntu – always prompt the user before executing a command in the shell
- Ubuntu – Using the Terminal in Ubuntu to change directory
- Ubuntu – No such file or directory when executing /usr/bin/time
- Ubuntu – Bash – executing commands in current shell
- Ubuntu – How to point to the current directory while executing commands
Best Answer
When you type the name of a program such as
a.out
the system looks for the file in your PATH. On my system, PATH is set toYours is probably similar. To check, enter
echo $PATH
in a terminal.The system looks through these directories in the order given and if it can't find the program produces a
command not found
error.Prepending the command with
./
effectively says "forget about the PATH, I want you to look only in the current directory".Similarly you can tell the system to look in only another specific location by prepending the command with a relative or absolute path such as:
../
means in the parent directory eg../hello
look for hello in the parent directory../Debug/hello
: "look forhello
in the Debug subdirectory of my current directory."or
/bin/ls
: "look forls
in the directory/bin
"By default, the current directory is not in the path because it's considered a security risk. See Why is . not in the path by default? on Superuser for why.
It's possible to add the current directory to your PATH, but for the reasons given in the linked question, I would not recommend it.