Creating An Executable On The Fly...

Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Operating Systems OS X (Apple) Creating An Executable On The Fly...
# 1  
Creating An Executable On The Fly...

Hi all...

Had an idea tonight which could really enhance shell scripting for me.
Yes I am aware there could be difficulties but......

Creating a C script inside the shell script to do a task, (a simple text print to stdout in
this example), compiling it on the fly, making sure it is executable and then calling it
as part of the script...

Of course one would have to develop and fully test the C code first before inserting it
into a shell script and there may be some difficulties on fairly complex C scripts to
insert into said shell script but nevertheless this looks mighty interesting...

This is using OSX 10.7.5, default bash terminal and for OSX users XCode will need
to be installed from the Apple site before "gcc" can be used as Apple do not include
this part of the OS as standard. It is free and takes little time to get it...

Not tried on Linux and other *NIX flavours but there is no reason why it will not work.
Code:
#!/bin/bash
# Embed_C.sh
> /tmp/cscript.c
> /tmp/cscript
echo "Create a C script..."
echo '/* Embed a C script and compile on the fly. */
#include<stdio.h>
main()
{
    printf("A simple text line as a test...\n");
}' > /tmp/cscript.c
cd /tmp
echo "Compile this new C script as the default a.out..."
gcc cscript.c
mv a.out cscript
echo "Rename and ensure it is executable..."
chmod 755 cscript
echo "Now call it..."
echo ""
./cscript
echo ""
echo "Done!..."
exit 0

Results:-
Code:
Last login: Tue Apr 15 18:58:08 on ttys000
AMIGA:barrywalker~> ./Embed_C.sh
Create a C script...
Compile this new C script as the default a.out...
Rename and ensure it is executable...
Now call it...

A simple text line as a test...

Done!...
AMIGA:barrywalker~> _

Enjoy the supreme flexibility of the shell...
# 2  
Just asking, isnt chmod 755 cscript just setting 'ownerships' of the file, as in, who may access/execute the file.
Rather than chmod +x cscript which would make it executeable.

Or am i mixing something?
# 3  
Hi sea...

Good point, just a quirk of mine...
As the working idea is released as Public Domain then the choice is yours...

I am not sure what use a shell-specific hard core executable would be to others
on any specific system hence I limited execution to the owner of said script...

I will remember next time... ;oD
# 4  
Quote:
Originally Posted by sea
Just asking, isnt chmod 755 cscript just setting 'ownerships' of the file, as in, who may access/execute the file.
Rather than chmod +x cscript which would make it executeable.

Or am i mixing something?
The chmod utility does not set ownerships; it sets modes. Both of the above commands set the execute bits on for the file's owner, group, and for the world.

Furthermore, if the compilation was successful, the compiler will make a.out (or whatever output file was designated) executable. So, the chmod is unnecessary. (If the compilation was not successful, changing the mode won't make it execute successfully until you fix the source and rebuild it successfully.)

And, if there are other compilations that could be happening in parallel in the same directory (and to avoid an extra step, even if there aren't), it would be easier to replace:
Code:
echo "Compile this new C script as the default a.out..."
gcc cscript.c
mv a.out cscript
echo "Rename and ensure it is executable..."
chmod 755 cscript

with:
Code:
echo "Compile this new C script..."
gcc cscript.c -o cscript

or:
Code:
echo "Compile this new C script..."
make cscript

These 2 Users Gave Thanks to Don Cragun For This Post:
# 5  
Having (a little) time in the train, trying to make it multi functional:

Code:
#!/bin/bash
#	Compile file from arg
#	Extension of: https://www.unix.com/os-x-apple-/246397-creating-executable-fly-post302898214.html
#
#	Variables
#
	src=/tmp/example.c				# Set default src file as example
#
#	Action
#
	if [ -z $1 ]					# No arg (codefile) is passed
	then 	touch $src				# Create empty file
		echo '/* Embed a C script and compile on the fly. */
#include<stdio.h>
main()
{
    printf("A simple text line as a test...\n");
}' 		> $src					# Redirect it to default src file
	else	# Check if it is in current path or somewhere else
		[ -f "$(pwd)/$1" ] && \
			src="./$1" || src="$1"		# Set var 'src' to passed argument
	fi
	out="${src/.c$/}"				# Remove '.c' extension for the outputfile
	echo -e "Compiling \"${src##*/}\" to $out..."		
	gcc "$src" -o "$out" || exit 1			# If build fails exit with failure  -- doesnt work  with 'spaced' path names :(
	"$out"						# Execute it, `"` if passed subfolders contain spaces
	exit 0						# Return successfully

Now edited at home on windows, took more time to write on the phone than expected... + copy-paste is a pain.
Going to try now (as if i had written all on the phone), gotta reboot to linux first though. Smilie

Have fun Smilie

EDIT:
Script fixed now, saved as ~./local/bin/compile with execution flag set, it outputs as:
Beeing aware, no compile arguments would be passed as of now, thats up to you to change/add if desired.
Code:
[sea@P50 ~]$ compile
Compiling "example.c" to /tmp/example...
A simple text line as a test...
[sea@P50 ~]$ compile example2.c
Compiling "example2.c" to ./example2...
Just another test...
[sea@P50 ~]$


Last edited by sea; 04-20-2014 at 06:15 PM..
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #426
Difficulty: Medium
JavaScript uses prototypes where many other object-oriented languages use classes for inheritance.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Execute script on the fly

Hi all, I am calling a zsh script from batch file . This zsh just removes the trigger file in a particular directory.File name is passed as a parameter from the batch file Problem is this batch is called in multiple other batch files and sometimes system says file cant be used as it is used... (4 Replies)
Discussion started by: Hypesslearner
4 Replies

2. Shell Programming and Scripting

Creating executable script--please help

Hi group, I am very beginner in shell scripting and self learning. I am trying to create and executable script to run awk from user defined variables. e.g. suppose from a given file I want to delete some rows or some columns We need to repeat this process for many files. Thus I was... (4 Replies)
Discussion started by: smitra
4 Replies

3. UNIX Desktop Questions & Answers

creating an executable file from shell scripts

Hi Friends, I have a shell script which does some operations etc, would it be possible to create an executable file out from this shell script? meaning the executable file is not editable, thus the source code will not be visible to other users for copyright reasons. Please help, thanks! (1 Reply)
Discussion started by: kokoro
1 Replies

4. What is on Your Mind?

The Only Way To Fly !

This is great! Lqh8e2KYIrU (8 Replies)
Discussion started by: Neo
8 Replies

5. Shell Programming and Scripting

Read Files on the Fly

Hi, I am creating files in a folder on the fly with arbritrary names but same extension (say, ".img"). How can I read each filename from the folder through a script. regards Angshuman (2 Replies)
Discussion started by: angshuman_ag
2 Replies

6. OS X (Apple)

What's The Easiest Route To Creating A Unix Executable File for Terminal?

I've seen the executable open in the application OmniOutliner, can I create an executable with this app? I'd like to be able to create the unix executable and insert it into terminal, but I'm not sure if the Omni app will allow me to create it. Any one have any ideas or possibly familiar with... (10 Replies)
Discussion started by: unimachead
10 Replies

7. UNIX for Dummies Questions & Answers

creating executable for every C file

hello Folks, once we compile any C code on Linux, we run the code using "./a.out".. but can we have an executable for every program so that we can run the code directly without compiling the code every time. just run the executable and get the output! Thanks! (7 Replies)
Discussion started by: compbug
7 Replies

8. UNIX for Dummies Questions & Answers

mv and compress on the fly

I want to move and compress a big export file. Like mv file_exp /filesystem/file_exp |compress The file system is too small to compress and move with 2 steps. What is the best command for me. I'm running solaris. :confused: (1 Reply)
Discussion started by: simquest
1 Replies

9. Programming

problem in creating executable for a client program

Hi, I am trying to run simple client server c program in unix.At the compling stage server is creating an executable but the client is not. below is the link to the source codes: http://www.cs.rpi.edu/courses/sysprog/sockets/server.c http://www.cs.rpi.edu/courses/sysprog/sockets/client.c ... (2 Replies)
Discussion started by: konas
2 Replies

10. UNIX for Dummies Questions & Answers

Rename files on the fly

Hi everyone, I am sort of new to shell scripting, I have a bunch of files that begin with 'blah' and I want to rename those files with something different (renamedFile1, renamedFile2, renamedFileN). I don't want to go through each file and rename them with the mv command. Could I just use a for... (4 Replies)
Discussion started by: kcor
4 Replies

Featured Tech Videos