Это возможно?
Вот пример:
#include <stdio.h>
#include <stdlib.h>
char testString[] = "blunt"
#define shellscript1 "\
#/bin/bash \n\
printf \"\nHi! The passed value is: $1\n\" \n\
"
int main(){
system(shellscript1);
return 0;
}
Теперь я хотел бы передать значение из testString в shellscript1 без необходимости резервирования для создания временного внешнего скрипта.
Я был избиение в моей голове, и я не мог понять, как это сделать. У кого-нибудь есть какие-либо идеи?
@ Сайрус Да. Есть способ?
вы можете использовать putenv и вызывать сценарий с этой переменной вместо $ 1
вы можете просто popen("bash") и скормить ему свои команды bash.
Это может помочь: C: В любом случае для загрузки параметров в вызов system () или Передача переменных в системную функцию в C
@ Жан-Франсуа Фабр и Сайрус, я прочту их всех. Спасибо!
больше не бей головой, когда можешь скормить питону :)





Использование среды, возможно, самый простой способ добиться этого.
#include <stdio.h>
#include <stdlib.h>
char testString[] = "blunt";
#define shellscript1 "bash -c 'printf \"\nHi! The passed value is: $testString\n\"'"
int main()
{
if (0>setenv("testString",testString,1)) return EXIT_FAILURE;
if (0!=system(shellscript1)) return EXIT_FAILURE;
return 0;
}
Есть и другие способы, такие как создание аргумента system в буфере (например, с помощью sprintf) или без использования system.
system обрабатывает свой аргумент как строку, идущую после "/bin/sh", "-c". От мой ответ до используя system () с аргументами командной строки в C я закодировал простую альтернативу my_system, которая принимает аргументы в виде массива строк.
С его помощью можно:
#define shellscript1 "printf \"\nHi! The passed value is: $1\n\" \n"
char testString[] = "blunt";
int main()
{
if (0!=my_system("bash", (char*[]){"bash", "-c", shellscript1, "--", testString,0})) return EXIT_FAILURE;
return 0;
}
Спасибо, что воплотили наши комментарии в реальность :) Я использую windows, поэтому я не мог рискнуть опубликовать неработающее решение.
@ Jean-FrançoisFabre Добавил немного более оригинальное решение, поэтому я не просто копирую комментарии. :)
конечно, как вы, наверное, поняли, в моем ответе не было никакого прикола, но я предпочел перефразировать. Хороший ответ
@PSkocik красивое и элегантное решение. Спасибо, добрый сэр.
Вы хотите передать testString в качестве аргумента shellscript1?