Jak uložit bash funkci do souboru script.c

Frenky

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #15 kdy: 01. 12. 2017, 01:30:08 »
Mám soubor test.c
v tomto souboru chci mít program napsaný v Cečku (jedna funkce main) a taky 3 bash funkce.

Kód: [Vybrat]
main() {
  spusti bash_funkce_1;
}

function bash_funkce_1()
{
  ..
  bash_funkce_2
  ..
}

function bash_funkce_2()
{
  ..
  bash_funkce_3
  ..
}

function bash_funkce_3()
{
  ..
  exit $?
}

Všechno to bude v tom jednom souboru test.c, zkompiluji to, spustím to, funkce main spusti bash funkci 1, ta spustí bash funkci 2, ta spustí bash funkci 3. Funkce main čeká na ukončení bash fukce, a to je všechno co potřebuji.


Jenda

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #16 kdy: 01. 12. 2017, 01:59:59 »
Ne, nechceš. Možná tam chceš mít ten skript jako char[] a spouštět ho přes system(3) (osobně bych ale stejně důrazně doporučil mít to v samostatném souboru), ale určitě tam nechceš mít ty funkce takto vypsané.

Tomas2

  • ****
  • 310
    • Zobrazit profil
    • E-mail
Re:Jak uložit bash funkci do souboru script.c
« Odpověď #17 kdy: 01. 12. 2017, 06:26:47 »
Frekny, je ti jasné, že se snažíš zmixovat na velice odlišné jazyky? Mluvíš o funkcích bashe, ale mám spíše dojem, že takhle chceš volat i další aplikace (např. ls je aplikace, zatímco exit je bash funkce, ono se to nedá moc dobře odlišit).

Z C můžeš volat jiný program, ale rozhodně nebude mít přístup do proměnných nadefinovaných v C a už rozhodně nebude fungovat jak tvůj zmíněný exit.

Každopádně bash je napsaný v C, jako převážná většina těch standardních aplikací na linuxu, nic ti nebrání (kromě GPL licence) vzít jejich zdrojové kódy a vnořit je do své aplikace a pak opravdu můžeš používat bash funkce nativně, jen to řeší pouze tvůj dotaz a nejspíš nikoliv tvůj problém.

Ivan Nový

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #18 kdy: 01. 12. 2017, 07:46:17 »
Ze Stackowerflow https://stackoverflow.com/questions/3736210/how-to-execute-a-shell-script-from-c-in-linux

použijete funkci system, nebo popen

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>

#define SHELLSCRIPT "\
#/bin/bash \n\
echo \"hello\" \n\
echo \"how are you\" \n\
echo \"today\" \n\
"
/*Also you can write using char array without using MACRO*/
/*You can do split it with many strings finally concatenate
  and send to the system(concatenated_string); */

int main()
{
    puts("Will execute sh with the following script :");
    puts(SHELLSCRIPT);
    puts("Starting now:");
    system(SHELLSCRIPT);    //it will run the script inside the c code.
    return 0;
}

Ivan Nový

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #19 kdy: 01. 12. 2017, 07:48:59 »
Frekny, je ti jasné, že se snažíš zmixovat na velice odlišné jazyky? Mluvíš o funkcích bashe, ale mám spíše dojem, že takhle chceš volat i další aplikace (např. ls je aplikace, zatímco exit je bash funkce, ono se to nedá moc dobře odlišit).

Z C můžeš volat jiný program, ale rozhodně nebude mít přístup do proměnných nadefinovaných v C a už rozhodně nebude fungovat jak tvůj zmíněný exit.

Každopádně bash je napsaný v C, jako převážná většina těch standardních aplikací na linuxu, nic ti nebrání (kromě GPL licence) vzít jejich zdrojové kódy a vnořit je do své aplikace a pak opravdu můžeš používat bash funkce nativně, jen to řeší pouze tvůj dotaz a nejspíš nikoliv tvůj problém.

No zase na druhé straně, podobně funguje každé ORM, v jednom jazyce prostředky toho jazyka vytvoří SQL příkaz, zde místo SQL se použije jako výsledek bash.


gll

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #20 kdy: 01. 12. 2017, 07:51:47 »
Vložte script do programu jako konstantu a spusťte ho funkcí system. Před vložením do c programu to projeďte tímhle http://tomeko.net/online_tools/cpp_text_escape.php?lang=en

Tomas2

  • ****
  • 310
    • Zobrazit profil
    • E-mail
Re:Jak uložit bash funkci do souboru script.c
« Odpověď #21 kdy: 01. 12. 2017, 09:10:48 »
No zase na druhé straně, podobně funguje každé ORM, v jednom jazyce prostředky toho jazyka vytvoří SQL příkaz, zde místo SQL se použije jako výsledek bash.

Všechen SW je založena na komunikaci s jinou aplikací, ono to je běžné :), ale jak vidíš v té ukázce co frenky poslal, má tam třeba exit $?, což je nesmyslu, v C mají funkce návratový kód, v bashi zase exit code a spojit to dohromady není jen volání.

Frenky

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #22 kdy: 01. 12. 2017, 10:29:04 »
OK, ještě bych položil jeden dotaz a tím bych to uzavřel.
Umí C všechno co bash? Myslím tím funkce a příkazy které jdou v bash spustit?
Když se rozhodnu pro napsání to v C a chtěl bych po někom aby mi napsal nějaké příklady jako je vytvoření adresáře a  souboru, seřazení pole, načítání textu ze souboru, spuštění nějaké akce po stisknutí klávesy atd.. Kolik můžu čekat cenu, stokoruny? tisícikoruny?
Díky všem moc za informace.

tisnik

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #23 kdy: 01. 12. 2017, 10:33:30 »
OK, ještě bych položil jeden dotaz a tím bych to uzavřel.
Umí C všechno co bash? Myslím tím funkce a příkazy které jdou v bash spustit?
Když se rozhodnu pro napsání to v C a chtěl bych po někom aby mi napsal nějaké příklady jako je vytvoření adresáře a  souboru, seřazení pole, načítání textu ze souboru, spuštění nějaké akce po stisknutí klávesy atd.. Kolik můžu čekat cenu, stokoruny? tisícikoruny?
Díky všem moc za informace.

Proc to musi byt zrovna C? Moc nechapu pozadovany vysledek, ale pokud to bude prace se soubory a procesy, jdi do BASHe, pokud s datovymi strukturami mimo pole/slovnik, do jineho jazyka. Ale cecko mi tam nezapada, to ma samozrejme svoje oblasti pouziti a delaji v nem asi miliony developeru, ale fakt je to pro tvoji aplikaci?

gll

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #24 kdy: 01. 12. 2017, 10:43:40 »
OK, ještě bych položil jeden dotaz a tím bych to uzavřel.
Umí C všechno co bash? Myslím tím funkce a příkazy které jdou v bash spustit?
Když se rozhodnu pro napsání to v C a chtěl bych po někom aby mi napsal nějaké příklady jako je vytvoření adresáře a  souboru, seřazení pole, načítání textu ze souboru, spuštění nějaké akce po stisknutí klávesy atd.. Kolik můžu čekat cenu, stokoruny? tisícikoruny?
Díky všem moc za informace.

Rekni co presne chces. Urcite ti tady na foru nekdo poradi zadarmo.

j

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #25 kdy: 01. 12. 2017, 10:55:41 »
OK, ještě bych položil jeden dotaz a tím bych to uzavřel.
Umí C všechno co bash?...
Jak uz ti bylo receno, bash je v C napsanej, takze zcela jiste umi C vse co umi bash a mnohem vic, jen si to musis naprogramovat, nebo nekde vzit hotovy.

A jelikoz je to nejspis dalsi z mnoha skolnich uloh, tak jen tak pro info, volat externi aplikaci z kodu jiny aplikace je vzdyky ten nehorsi moznej napad vubec. Pokud potrebujes trebas obsah adresare, tak kazdej normalni jazyk (vcetne Ccka) na to ma knihovni funkce. Vazne nemusis volat ls/dir.

gll

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #26 kdy: 01. 12. 2017, 10:58:14 »
kdyz se rozhodnes pro python, tak bych doporucil tuhle knihovnu https://plumbum.readthedocs.io/en/latest/ .

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #27 kdy: 01. 12. 2017, 11:58:49 »
OK, ještě bych položil jeden dotaz a tím bych to uzavřel.
Umí C všechno co bash? Myslím tím funkce a příkazy které jdou v bash spustit?
Když se rozhodnu pro napsání to v C a chtěl bych po někom aby mi napsal nějaké příklady jako je vytvoření adresáře a  souboru, seřazení pole, načítání textu ze souboru, spuštění nějaké akce po stisknutí klávesy atd.. Kolik můžu čekat cenu, stokoruny? tisícikoruny?
Díky všem moc za informace.
:o
wtf?

Ravise

  • ***
  • 113
    • Zobrazit profil
    • E-mail
Re:Jak uložit bash funkci do souboru script.c
« Odpověď #28 kdy: 01. 12. 2017, 12:54:40 »
Prosímtě, pleteš do sebe ponorky a lodě. V bashi se pracuje úplně jinak než v C. Přečti si co je to shell, co to znamená kompilovaný jazyk, doptej se na to čemu nerozumíš a hlavně - řekni čeho chceš doopravdy docílit, vsadím levou ruku na to že tvůj problém jde vyřešit lépe.

v2kt0r

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #29 kdy: 01. 12. 2017, 13:25:15 »
Mezi tím co budu já studovat jazyk C, ty si přečti ještě jednou dotaz..
Nejdřív polož kvalifikovaný dotaz, potom raď ostatním, jako ho mají číst. V C se neskriptuje, tento jazyk se - dvoustupňově - překládá. Většinou do binární formy. Tak se potom samostatně spouští.

Mohl by sis samozřejmě ve svém C programu systémovým voláním spustit shell a tomu pak předat k vykonání skript, který bude součástí tvého Cčkového zdrojáku...ale něco mi říká, že to nebylo cílem tvého dotazu.