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
Nov 10 at 9:10
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
Nov 10 at 9:13
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
Nov 10 at 9:14
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25
|
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 Nov 10 at 10:04
Cyrus
44.6k43475
44.6k43475
asked Nov 10 at 9:07
Aleksandar Čolović
2916
2916
Do you want to pass testString as argument to shellscript1?
– Cyrus
Nov 10 at 9:10
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
Nov 10 at 9:13
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
Nov 10 at 9:14
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25
|
show 2 more comments
Do you want to pass testString as argument to shellscript1?
– Cyrus
Nov 10 at 9:10
1
you could useputenv
and call the script with that variable instead of $1
– Jean-François Fabre
Nov 10 at 9:13
3
you could justpopen("bash")
and feed it your bash commands.
– Jean-François Fabre
Nov 10 at 9:14
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25
Do you want to pass testString as argument to shellscript1?
– Cyrus
Nov 10 at 9:10
Do you want to pass testString as argument to shellscript1?
– Cyrus
Nov 10 at 9:10
1
1
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
Nov 10 at 9:13
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
Nov 10 at 9:13
3
3
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
Nov 10 at 9:14
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
Nov 10 at 9:14
4
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
1
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25
|
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
Nov 10 at 9:23
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
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
Nov 10 at 9:23
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
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
Nov 10 at 9:23
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
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 Nov 10 at 9:34
answered Nov 10 at 9:19
PSkocik
31.7k54569
31.7k54569
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
Nov 10 at 9:23
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
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
Nov 10 at 9:23
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
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
Nov 10 at 9:23
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
Nov 10 at 9:23
1
1
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
@Jean-FrançoisFabre Added a slightly more original solution so I'm not just copying the comments. :)
– PSkocik
Nov 10 at 9:38
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
Nov 10 at 9:39
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
Nov 10 at 9:39
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
@PSkocik beautiful and elegant solution. Thank you, kind sir.
– Aleksandar Čolović
Nov 10 at 9:44
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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
Required, but never shown
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
Required, but never shown
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
Required, but never shown
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
Required, but never shown
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
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Do you want to pass testString as argument to shellscript1?
– Cyrus
Nov 10 at 9:10
1
you could use
putenv
and call the script with that variable instead of $1– Jean-François Fabre
Nov 10 at 9:13
3
you could just
popen("bash")
and feed it your bash commands.– Jean-François Fabre
Nov 10 at 9:14
4
This might help: C: Anyway to load parameters into a system() call or Passing variables to system function in C
– Cyrus
Nov 10 at 9:15
1
don't bash your head anymore when you can feed it to a python :)
– Jean-François Fabre
Nov 10 at 9:25