9
votes

Appelez la fonction C dans le script Bash

liée à Question 3451993 , est-il possible d'appeler une fonction interne à la subst.c (dans le code source Bash) dans un script Bash?


0 commentaires

6 Réponses :


4
votes

Le moyen le plus simple de le faire consiste à écrire un programme simple qui collecte l'entrée, la nourrit à la fonction, puis imprime le résultat. Pourquoi ne nous dis-tu pas ce que vous essayez d'accomplir et pouvons-nous peut-être suggérer un moyen plus facile de "cuire ce chat".


5 commentaires

J'essaie d'appeler une fonction interne à bash, mais il semble que cela ne soit pas compilé dans une commande de shell distincte. S'il vous plaît voir le lien pour plus d'informations.


Il est très difficile de le faire et est généralement très peu fiable. Vous ferez mieux d'essayer d'obtenir ce que vous voulez d'une manière différente.


@ L0B0: Redémarrer la question n'est pas équivalente à dire ce que vous essayez d'accomplir.


Le moyen le plus simple de le faire est d'écrire un programme simple qui collecte l'entrée, la nourrit à la fonction, puis imprime le résultat Comment faites-vous cela sur chrome OS? C'est le cas où toutes les partitions sont montées avec NOEXEC, à l'exception des rootfs qui est protégée par l'écriture.


Jamais utilisé chrome OS. On dirait qu'ils ne vous permettent rien d'exécuter quoi que ce soit. Si c'est vrai, vous n'aurez pas de piratage simple. Vous devrez probablement écrire un plugin pour chrome.



3
votes

non.

Vous ne pouvez pas accéder à une fonction interne à la coque binaire de la coque si elle n'est pas exportée comme une fonction shell.


0 commentaires

1
votes

Non, vous devrez écrire un programme C court-C, le compiler et l'appeler à partir de la coquille.


0 commentaires

6
votes

bash prend en charge les produits chargés. Vous pourrez peut-être utiliser cela pour faire ce que vous voulez. Voir les fichiers de votre / USR / Share / Doc / Bash / Exemples / charbons (ou similaire).


2 commentaires

Bonne idée. Malheureusement, Grep STI / USR / Share / Doc / Bash / Exemples / Loadables / * Rien n'a été retourné.


@ L0B0: Cela signifie simplement que vous devez écrire votre propre. En outre, Grep STI / USR / Inclure / Bash / * donne /usr/include/bash/shell.h:#include "STI" , grep shell.h / usr / action / doc / bash / exemples / charbons / * donne un tas. Malheureusement, Grep Invite / USR / Share / Doc / Bash / Exemples / Loadables / * ne donne rien, mais Grep Invite /usr/include/bash/subst.h intéressant.



1
votes

Ce code a l'air assez élégant: (de ici ) Sa même solution @jay a souligné.

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$


0 commentaires

4
votes

Il est même possible d'utiliser des structures de données C;)

Ceci est CTTYPES.SH, une interface de fonction étrangère pour bash. CTTYPES.SH est un plug-in Bash qui fournit une interface de fonction étrangère directement dans votre coquille. En d'autres termes, il vous permet d'appeler des routines dans des bibliothèques partagées de Bash Bash.

Vérifiez https://github.com/taviso/ctypes.sh ;)


1 commentaires

C'est le projet le plus intéressant que j'ai vu au cours des deux dernières années. Merci pour votre réponse!