Вызов функции C в скрипте Bash - PullRequest
7 голосов
/ 11 августа 2010

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

Ответы [ 5 ]

5 голосов
/ 11 августа 2010

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

3 голосов
/ 11 августа 2010

Нет.

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

2 голосов
/ 11 августа 2010

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

1 голос
/ 24 февраля 2012

Этот код выглядит довольно элегантно: (с здесь ) Это то же самое решение, на которое указал @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$
1 голос
/ 11 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...