Pass a value from a C variable to an embedded shell script?
up vote
3
down vote
favorite
Is this possible?
Here is an example:
#include <stdio.h>
#include <stdlib.h>
char testString="blunt"
#define shellscript1 "
#/bin/bash n
printf "nHi! The passed value is: $1n" n
"
int main()
system(shellscript1);
return 0;
Now I would like to pass a value from testString
to shellscript1
without having to reserve to making a temporary external script.
I've been bashing my head, and I couldn't figure out how to do it. Does anyone have any ideas?
c bash arguments
|
show 2 more comments
up vote
3
down vote
favorite
Is this possible?
Here is an example:
#include <stdio.h>
#include <stdlib.h>
char testString="blunt"
#define shellscript1 "
#/bin/bash n
printf "nHi! The passed value is: $1n" n
"
int main()
system(shellscript1);
return 0;
Now I would like to pass a value from testString
to shellscript1
without having to reserve to making a temporary external script.
I've been bashing my head, and I couldn't figure out how to do it. Does anyone have any ideas?
c bash arguments
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
yesterday
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
yesterday
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday
|
show 2 more comments
up vote
3
down vote
favorite
up vote
3
down vote
favorite
Is this possible?
Here is an example:
#include <stdio.h>
#include <stdlib.h>
char testString="blunt"
#define shellscript1 "
#/bin/bash n
printf "nHi! The passed value is: $1n" n
"
int main()
system(shellscript1);
return 0;
Now I would like to pass a value from testString
to shellscript1
without having to reserve to making a temporary external script.
I've been bashing my head, and I couldn't figure out how to do it. Does anyone have any ideas?
c bash arguments
Is this possible?
Here is an example:
#include <stdio.h>
#include <stdlib.h>
char testString="blunt"
#define shellscript1 "
#/bin/bash n
printf "nHi! The passed value is: $1n" n
"
int main()
system(shellscript1);
return 0;
Now I would like to pass a value from testString
to shellscript1
without having to reserve to making a temporary external script.
I've been bashing my head, and I couldn't figure out how to do it. Does anyone have any ideas?
c bash arguments
c bash arguments
edited yesterday
Cyrus
44.1k43375
44.1k43375
asked yesterday
Aleksandar Čolović
2916
2916
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
yesterday
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
yesterday
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday
|
show 2 more comments
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
yesterday
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
yesterday
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
1
1
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
yesterday
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
yesterday
3
3
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
yesterday
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
yesterday
4
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
1
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday
|
show 2 more comments
1 Answer
1
active
oldest
votes
up vote
4
down vote
accepted
Using the environment is possibly the simplest way to achieve it.
#include <stdio.h>
#include <stdlib.h>
char testString="blunt";
#define shellscript1 "bash -c 'printf "nHi! The passed value is: $testStringn"'"
int main()
if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
if(0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
There are other ways, like generating the system
argument in a buffer (e.g., with sprintf
) or not using system
.
system
treats its argument like a a string to come after "/bin/sh", "-c"
. In my answer to using system() with command line arguments in C I coded up a simple my_system
alternative that takes the arguments as a string array.
With it, you can do:
#define shellscript1 "printf "nHi! The passed value is: $1n" n"
char testString="blunt";
int main()
if(0!=my_system("bash", (char*)"bash", "-c", shellscript1, "--", testString,0)) return EXIT_FAILURE;
return 0;
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
4
down vote
accepted
Using the environment is possibly the simplest way to achieve it.
#include <stdio.h>
#include <stdlib.h>
char testString="blunt";
#define shellscript1 "bash -c 'printf "nHi! The passed value is: $testStringn"'"
int main()
if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
if(0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
There are other ways, like generating the system
argument in a buffer (e.g., with sprintf
) or not using system
.
system
treats its argument like a a string to come after "/bin/sh", "-c"
. In my answer to using system() with command line arguments in C I coded up a simple my_system
alternative that takes the arguments as a string array.
With it, you can do:
#define shellscript1 "printf "nHi! The passed value is: $1n" n"
char testString="blunt";
int main()
if(0!=my_system("bash", (char*)"bash", "-c", shellscript1, "--", testString,0)) return EXIT_FAILURE;
return 0;
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
add a comment |
up vote
4
down vote
accepted
Using the environment is possibly the simplest way to achieve it.
#include <stdio.h>
#include <stdlib.h>
char testString="blunt";
#define shellscript1 "bash -c 'printf "nHi! The passed value is: $testStringn"'"
int main()
if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
if(0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
There are other ways, like generating the system
argument in a buffer (e.g., with sprintf
) or not using system
.
system
treats its argument like a a string to come after "/bin/sh", "-c"
. In my answer to using system() with command line arguments in C I coded up a simple my_system
alternative that takes the arguments as a string array.
With it, you can do:
#define shellscript1 "printf "nHi! The passed value is: $1n" n"
char testString="blunt";
int main()
if(0!=my_system("bash", (char*)"bash", "-c", shellscript1, "--", testString,0)) return EXIT_FAILURE;
return 0;
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
add a comment |
up vote
4
down vote
accepted
up vote
4
down vote
accepted
Using the environment is possibly the simplest way to achieve it.
#include <stdio.h>
#include <stdlib.h>
char testString="blunt";
#define shellscript1 "bash -c 'printf "nHi! The passed value is: $testStringn"'"
int main()
if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
if(0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
There are other ways, like generating the system
argument in a buffer (e.g., with sprintf
) or not using system
.
system
treats its argument like a a string to come after "/bin/sh", "-c"
. In my answer to using system() with command line arguments in C I coded up a simple my_system
alternative that takes the arguments as a string array.
With it, you can do:
#define shellscript1 "printf "nHi! The passed value is: $1n" n"
char testString="blunt";
int main()
if(0!=my_system("bash", (char*)"bash", "-c", shellscript1, "--", testString,0)) return EXIT_FAILURE;
return 0;
Using the environment is possibly the simplest way to achieve it.
#include <stdio.h>
#include <stdlib.h>
char testString="blunt";
#define shellscript1 "bash -c 'printf "nHi! The passed value is: $testStringn"'"
int main()
if(0>setenv("testString",testString,1)) return EXIT_FAILURE;
if(0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
There are other ways, like generating the system
argument in a buffer (e.g., with sprintf
) or not using system
.
system
treats its argument like a a string to come after "/bin/sh", "-c"
. In my answer to using system() with command line arguments in C I coded up a simple my_system
alternative that takes the arguments as a string array.
With it, you can do:
#define shellscript1 "printf "nHi! The passed value is: $1n" n"
char testString="blunt";
int main()
if(0!=my_system("bash", (char*)"bash", "-c", shellscript1, "--", testString,0)) return EXIT_FAILURE;
return 0;
edited yesterday
answered yesterday
PSkocik
30.1k54267
30.1k54267
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
add a comment |
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
1
1
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
thanks for coding our comments into reality :) I'm running windows so I couldn't risk to post a non-working solution.
– Jean-François Fabre
yesterday
1
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
yesterday
1
1
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
of course there was no snark in my answer as you probably understood, but I prefered to re-state it. Good answer
– Jean-François Fabre
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
yesterday
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53237490%2fpass-a-value-from-a-c-variable-to-an-embedded-shell-script%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Do you want to pass testString as argument to shellscript1?
– Cyrus
yesterday
1
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
yesterday
3
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
yesterday
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
yesterday
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
yesterday