2010-08-10 13 views

risposta

5

Bash supporta builtin caricabili. Potresti riuscire a farne uso per fare ciò che vuoi. Vedere i file nella directory /usr/share/doc/bash/examples/loadables (o simile).

+0

Buona idea. Sfortunatamente 'grep subst/usr/share/doc/bash/examples/loadables/*' non ha restituito nulla. – l0b0

+0

@ l0b0: significa solo che devi scrivere il tuo. Inoltre, 'grep subst/usr/include/bash/*' fornisce '/usr/include/bash/shell.h:#include" subst.h "', 'grep shell.h/usr/share/doc/bash/esempi/caricabili/* 'dà un mucchio. Sfortunatamente, 'grep prompt/usr/share/doc/bash/examples/loadables/*' non fornisce nulla, ma 'grep prompt/usr/include/bash/subst.h' sembra interessante. –

1

Il modo più semplice per eseguire questa operazione è scrivere un semplice programma che raccolga l'input, lo invii alla funzione, quindi stampa il risultato. Perché non ci dici cosa stai cercando di realizzare e forse possiamo suggerire un modo più semplice per "skin this cat".

+0

Sto provando a chiamare una funzione interna a Bash, ma sembra che non sia stata compilata in un comando shell separato. Si prega di consultare il link per maggiori informazioni. – l0b0

+0

È molto difficile farlo e di solito è molto inaffidabile. Stai meglio cercando di ottenere quello che vuoi in un modo diverso. – Jay

+0

@ l0b0: riaffermare la domanda non equivale a dire quello che stai cercando di realizzare. – msw

3

No.

Non è possibile accedere a una funzione interna al binario shell dalla shell se non viene esportata come una funzione di shell.

0

No, dovrai scrivere un breve programma in C, compilarlo e chiamarlo dalla shell.

0

Questo codice sembra piuttosto elegante: (da here) La stessa soluzione ha sottolineato @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$ 
Problemi correlati