7

I wrote a simple C program on a different Linux computer. I would compile it using

gcc guess.c

That would output an a.out file. I would then just type the command a.out, and my C program would run.

I attempted to run the same C program on my Pi. It compiles well and outputs an a.out file. Though when I attempt to run the command "a.out", I get an error:

-bash: a.out: command not found.

Does anyone know how to get a.out support working on the Pi?

syb0rg
  • 8,178
  • 4
  • 38
  • 51
Morgan Kenyon
  • 173
  • 1
  • 1
  • 6

2 Answers2

17

you should type:

./a.out

if your file is in the current directory.

also, you might check if executable bit is set with

ls -al a.out

and if not, set it using

chmod +x a.out

however, most compilers will set executable bit for you automagically.

lenik
  • 11,533
  • 2
  • 32
  • 37
16

You need to put a ./ in front of a.out in order to execute that:

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 to

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Yours 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:

./Debug/hello : "look for hello in the Debug subdirectory of my current directory."

or /bin/ls : "look for ls 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.

I'm not sure why the answer said not to change your PATH, since the answer on SuperUser said that this was a "very lame and useless anti-virus measure, and nothing stops you from adding dot to the path yourself."

syb0rg
  • 8,178
  • 4
  • 38
  • 51