liée à Question 3451993 , est-il possible d'appeler une fonction interne à la subst.c (dans le code source Bash) dans un script Bash? p>
6 Réponses :
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". P>
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 code> 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.
non. p>
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. P>
Non, vous devrez écrire un programme C court-C, le compiler et l'appeler à partir de la coquille. P>
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 code> (ou similaire). P>
Bonne idée. Malheureusement, Grep STI / USR / Share / Doc / Bash / Exemples / Loadables / * Code> Rien n'a été retourné.
@ L0B0: Cela signifie simplement que vous devez écrire votre propre. En outre, Grep STI / USR / Inclure / Bash / * Code> donne /usr/include/bash/shell.h:#include "STI" code>, grep shell.h / usr / action / doc / bash / exemples / charbons / * code> donne un tas. Malheureusement, Grep Invite / USR / Share / Doc / Bash / Exemples / Loadables / * Code> ne donne rien, mais Grep Invite /usr/include/bash/subst.h code> intéressant.
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$
Il est même possible d'utiliser des structures de données C;) p>
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. P> blockQuote>
Vérifiez https://github.com/taviso/ctypes.sh ;) p>
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!