Вызов функции C в Bash script

Связанный с вопросом 3451993, можно вызвать функцию, которая является внутренней для subst.c(в исходном коде Bash) в Bash script?

5 ответов

Bash поддерживает загружаемые встроенные функции. Вы могли бы использовать это, чтобы делать то, что хотите. Смотрите файлы в каталоге /usr/share/doc/bash/examples/loadables (или аналогичном).


Нет.

Вы не можете получить доступ к внутренней функции для оболочки оболочки из оболочки, если она не экспортируется как функция оболочки.


Самый простой способ сделать это - написать простую программу, которая собирает вход, передает его функции, а затем печатает результат. Почему бы вам не рассказать нам, что вы пытаетесь выполнить, и, возможно, мы можем предложить более простой способ "обмануть этого кота".


Этот код выглядит довольно элегантно: (от здесь) Это же решение @Jay указал.

bash$ cat testing.c 
#include <stdio.h>
char* say_hello()
{
 return "hello world";
}
float calc_xyzzy()
{
 return 6.234;
}
int main(int argc, char** argv)
{
 if (argc>1) {
 if (argv[1][0] =='1') {
 fprintf(stdout,"%s\n",say_hello());
 } else if ( argv[1][0] == '2') {
 fprintf(stdout,"%g\n",calc_xyzzy());
 }
 }
 return 0;
}
bash$ gcc -o testing testing.c 
bash$ ./testing 1
hello world
bash$ ./testing 2
6.234
bash$ var_1="$(./testing 1)"
bash$ var_2="$(./testing 2)"
bash$ echo $var_1
hello world
bash$ echo $var_2
6.234
bash$
</stdio.h>


Нет, вам придется написать короткую программу на C, скомпилировать ее и вызвать из оболочки.

licensed under cc by-sa 3.0 with attribution.