I am using mac OS x and have written C program using GCC compiler.
But while running the program on terminal I am being shown that "No such file or directory found"
Please help me how to select the path?
run it with $./yourProgramFile command the ./ in the beginning is important. It means the program resides in the current directory.
Example:
/path/to/your/cFile $ gcc myfile.c -o myfile
/path/to/your/cFile $ ./myfile
You can do one of two things
1) Add the program's folder to the system's PATH; that way, you can call the program from any location. If it's a program you plan to use constantly, this is the best option.
Here's a way to do that:
Open up the .profile file in your home directory using any text editor.
Paste the following code anywhere in the file, preferably around the bottom of the file.
#make sure there's no space in the pasted code
export PATH=$PATH:path_to_the_program
Save it and restart your computer. That should put the program in the system's PATH.
2) Navigate to the folder of the program; then type
./program_name
Hope the explanation is clear and the answer helps.
Make sure that when you compile the program, you should use -o program_name to make the program name whatever you want it to be; otherwise, the program's name will be a.out, which would be very confusing.
Related
My c program file is Numbers.c
cc- Numbers.c -o output.txt
can give me results in another file. But how can I modify that command line, therefore, I can add the results of Numbers.c to $PATH?
I tried:
cc Numbers.c >>PATH
But there is no change in $PATH when I check it;
echo $PATH
How to add an executable program to PATH environment variable?
Make these steps to add a C program to PATH variable.
First of all make a back up from important PATH Variable with echo $PATH > ~/path.txt
Compile the C source code with gcc Numbers.c -o Numbers
Suppose the executable output file Numbers is place under ~/barname.
Run export PATH="$PATH:~/barname" to append ~/barname folder to PATH variable.
Now you can run the executable file i.e: Numbers from any location on Terminal.
I answer to similar question at Iranian Ubuntu community.
and now translate it to English.
Edit
By performing jonathan-leffler notes in comment section, i can change above answer to:
Having many different directories inside PATH environment variable not recommend and have performance issue.
If i want to use specific programs only for myself, create a new directory in current user (me) home folder. mkdir $HOME/bin Then copy Numbers program and all of other programs in to it. for example cp ~/barname/Numbers ~/bin. And finally add only one directory i.e: $HOME/bin to PATH variable by export PATH="$PATH:$HOME/bin".
In a situation when working on a real multi user system, like when work as Sysadmin its better to copy programs to /usr/local/bin and then adding this to PATH by export PATH="$PATH:/usr/local/bin. Now every users can access and run programs.
I compiled a silly little "hello world" C program called main.c:
gcc main.c
As expected, a file called a.out appeared, which they say is an executable. From that same directory, if I type
a.out
and hit enter, it says "command not found". But if I type
./a.out
It says "hello world", as desired. I've never seen an executable that requires a './' in front of it to run. Why now?
All executables that aren't in your PATH require an explicit path from root / or the local directory ./ to run. A quick search turns up other threads with essentially the same question:
Why do you need ./ (dot-slash) before script name to run it in bash?
This also has the added benefit of helping with your auto completion in your shell (assuming it supports it). If you type just aTabTab then it will list every executable in your path that starts with "a". However, if you type ./aTab it will probably just auto-complete as a.out since it will only look at executable files in the current directory starting with "a". So, looking at it that way, the "./" actually saves you typing a few keys!
It is standard practice in Unix and Linux not to have the current working directory in the path. If you want to have MSDOS/Windows behavior, alter your PATH variable to include . as the first directory.
It's because the system is looking for a.out or any other exec. file in some special paths. And the current dir in not in that list by default (usually).
look at the list of such paths:
$ env|grep PATH
you can add such current dir to PATH env. variable:
$ export PATH=$PATH:.
But you better avoid doing that and run ./a.out.
Such tech. provides us understanding that we are running specified file from current dir,
not the other file with the same name from another (potentially) dir. So, we know what we run exactly.
When you type something like a.out into a Linux terminal, you're implying that you want to run a command called a.out. By default, the terminal does not look in the current directory for these commands, it looks in PATH - a set of directories for executable programs. It is usually these directories:
/bin
/usr/bin
/usr/local/bin
among others (you can check them all by running echo $PATH)
You have to specifiy the directory directory of your program for it to run, if it is not in one of the directories of PATH. For example:
./a.out works because . refers to the directory you're in
../a.out could work if a.out is in a parent directory (.. refers to the parent)
directory
projectdir/a.out also works, if your program is in the sub-directory, projectdir
That's because a.out is not in your $PATH.
The command you provide is searched in the $PATH (environment variable in linux) by the shell.
$PATH basically is the list of directories. When you provide the executable name, shell searches it in the directories provides by $PATH.
Since a.out is not in your $PATH, you've to explicitly provide the path to a.out.
I am compiling a C code in linux with the following command:
gcc -o myprogram myprogram.c
If I hadn't given a name to it, I could have simply written the command ./a.out to execute it. But now, to execute the program I just write "myprogram" to the command line, but it says "command not found". What can I do to execute it?
It's possible that the current directory (".") isn't on your PATH. (You can check this by typing echo $PATH, this is a list of directories delimited with" :". "." should be in the list if you want to run something in the current directory.)
If the current directory isn't on your PATH, you'll need to type ./myprogram (or whatever the correct path is).
./myprogram
should do the trick.
(But really... have you looked at the contents of the directory after compiling the program "without name"? Or do you think ./a.out is a magic sequence Bash recognizes?)
I am making an online judge. This my school project.
I am taking a .c file from the user. I am able to compile the .c file with command prompt. But I don't know how to run this file. I need to run this file, take input from a text file and save output in a text file. The compilation code was:
gcc main.c -o HelloWorld
I need to run this file, take input from a text file and save output
in a text file.
Assuming you're on Linux, this should work:
./HelloWorld < input.txt > output.txt
Just type in the full path. For example, if you compiled the file in %homedrive% with the name dummy.exe, type %homedrive%/dummy.exe.
Also, if you're already in %homedrive%, you can just type dummy.exe.
Edit: Assuming you're on Windows.
When you type HelloWorld in Linux terminal, your system will be searching this program in place, where PATH variable indicates. Most likely it is /bin. You can check your PATH by typing:
echo $PATH
So, you must precise, that HelloWorld is in concrete dirctory or change $PATH variable.
./HelloWorld
Dot indicates current directory
I assume you're on Linux? If yes, run it with:
./HelloWorld
The ./ is needed so that the shell knows to look for the executable file in the current directory. (Executables are not looked for automatically in the current directory due to security reasons.)
If on Windows, just type its name:
HelloWorld
Appending .exe to the filename is optional.
Redirecting standard input works like this:
HelloWorld < inputfile
Standard output is redirected with > instead:
HelloWorld > outputfile
You can combine both:
HelloWorld < inputfile > outputfile
You can install TCC
#!/usr/local/bin/tcc -run
or else try the option ./HelloWorld
I am having a situation for which I am looking for some suggestion.
Suppose I write a program which prints the directory names of the directories.
Is it possible to convert this program into a command (just on my system).
Not be alias but via C only.
As long as the file is executable (has the exec x access for the user starting it) and can be seen from the command interpreter (usually bash or sh), you can consider it to be a command.
There will be no difference in running your own file from your path than the ls command for instance.
Also, the C (or C++ ...) language is not a requirement. There are plenty of commands in, for instance, /usr/bin that are a script, meaning they're sh or bash (or even perl)...
access Ensure the file has the x access right (e.g. chmod u+x file)
path Ensure the file is in your PATH, or add an entry in your path (for instance) with PATH=$PATH:mypath
test Test it well before to put it in a path from which other users may have access
Put it in the path. On Linux, for example, you should put it in /usr/local/bin.
First, compile the program and create an executable using gcc program.c -o myexecfile. Then, an executable file named myexecfile is created in the same directory. You can run it by using ./myexecfile.
If you are on Unix(Linux etc.) and want to use it like ls or any other standard command, you need to place it in a directory that is specified in $PATH variable. For example, /usr/local/bin.