2010-08-10 5 views

Respuesta

5

Bash admite compilaciones cargables. Es posible que pueda hacer uso de esto para hacer lo que quiera. Vea los archivos en su directorio /usr/share/doc/bash/examples/loadables (o similar).

+0

Buena idea. Desafortunadamente 'grep subst/usr/share/doc/bash/examples/loadables/*' no devolvió nada. – l0b0

+0

@ l0b0: Eso solo significa que tienes que escribir el tuyo. Además, 'grep subst/usr/include/bash/*' da '/usr/include/bash/shell.h:#include" subst.h "', 'grep shell.h/usr/share/doc/bash/examples/loadables/* 'da un montón. Desafortunadamente, 'grep prompt/usr/share/doc/bash/examples/loadables/*' no da nada, pero 'grep prompt/usr/include/bash/subst.h' se ve interesante. –

1

La forma más sencilla de hacerlo es escribir un programa simple que recopila la entrada, la envía a la función y luego imprime el resultado. ¿Por qué no nos dices qué estás intentando lograr y quizás podemos sugerir una manera más fácil de "pelar a este gato"?

+0

Estoy tratando de llamar a una función que es interna de Bash, pero parece que no está compilada en un comando de shell separado. Por favor, mira el enlace para más información. – l0b0

+0

Es muy difícil hacer esto y generalmente es muy poco confiable. Es mejor que trates de obtener lo que quieres de una manera diferente. – Jay

+0

@ l0b0: volver a formular la pregunta no equivale a decir lo que está tratando de lograr. – msw

3

No.

No se puede acceder a una función interna para el binario cáscara de la cáscara si no se exporta como una función de shell.

0

No, tendrás que escribir un breve programa C, compilarlo y llamarlo desde el shell.

0

Este código se ve bastante elegante: (desde here) Es la misma solución que @Jay señaló.

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$ 
Cuestiones relacionadas