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?










share|improve this question























  • 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














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?










share|improve this question























  • 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












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?










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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
















  • 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















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












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;






share|improve this answer


















  • 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










Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















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






























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;






share|improve this answer


















  • 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














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;






share|improve this answer


















  • 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












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;






share|improve this answer














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;







share|improve this answer














share|improve this answer



share|improve this answer








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












  • 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

















 

draft saved


draft discarded















































 


draft saved


draft discarded














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














































































這個網誌中的熱門文章

How to read a connectionString WITH PROVIDER in .NET Core?

In R, how to develop a multiplot heatmap.2 figure showing key labels successfully

Museum of Modern and Contemporary Art of Trento and Rovereto