Jak uložit bash funkci do souboru script.c

Frenky

Jak uložit bash funkci do souboru script.c
« kdy: 30. 11. 2017, 14:38:51 »
Zdravím, mám nějaký script napsaný v C, můžu do toho souboru přidat vlastní funkci která je pro bash a následně ji spustit? Chtěl bych zachovat pouze jeden soubor. Díky


ByCzech

  • *****
  • 1 861
    • Zobrazit profil
    • E-mail
Re:Jak uložit bash funkci do souboru script.c
« Odpověď #1 kdy: 30. 11. 2017, 16:05:34 »
Zdravím, mám nějaký script napsaný v C, můžu do toho souboru přidat vlastní funkci která je pro bash a následně ji spustit? Chtěl bych zachovat pouze jeden soubor. Díky

To je pro mě docela novinka, že v C se skriptuje :)... Doporučuji nastudovat si co to je jazyk C a až potom jak se z něj spouštějí programy/systémové příkazy (system(), exec*(), fork()...)

blah

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #2 kdy: 30. 11. 2017, 16:22:08 »
Jo, stačí skript překompilovat v python++ do binární podoby a to pak vložit na konec souboru s tím C skriptem a potom překódovat do hexadimálního tvaru a pak spustit přes cmd.exe powershell -BypassExec a mělo by to fungovat.

Frenky

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #3 kdy: 30. 11. 2017, 16:22:31 »
Mezi tím co budu já studovat jazyk C, ty si přečti ještě jednou dotaz..

Frenky

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #4 kdy: 30. 11. 2017, 16:25:01 »
Jo, stačí skript překompilovat v python++ do binární podoby a to pak vložit na konec souboru s tím C skriptem a potom překódovat do hexadimálního tvaru a pak spustit přes cmd.exe powershell -BypassExec a mělo by to fungovat.
Poběží to pouze pod Linuxem.


Joe_Black

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #5 kdy: 30. 11. 2017, 16:32:59 »
Toto musi byt trolling ...

samalama

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #6 kdy: 30. 11. 2017, 16:43:05 »
nie nie, to je len dalsi idiot, co sa ide hrat na it-ckara...

Ivan Nový

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #7 kdy: 30. 11. 2017, 16:53:31 »
Tak to je už vrchol bashismu :-)))

David1234

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #8 kdy: 30. 11. 2017, 16:55:00 »
Proč musí být každý kdo se něco učí idiot? Nechápu.

Ivan Nový

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #9 kdy: 30. 11. 2017, 17:01:46 »
Proč musí být každý kdo se něco učí idiot? Nechápu.

To je přece unixová filosofie, umět jednu jednoduchou věc, ale dobře.

samalama

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #10 kdy: 30. 11. 2017, 17:11:26 »
Proč musí být každý kdo se něco učí idiot? Nechápu.

to som kde napisal?

kazdy ne-idiot si najprv nastuduje teoriu, aby vedel o com sa toci a potom by riesil problemy...

Jenda

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #11 kdy: 30. 11. 2017, 18:23:42 »
Nechápu, co za lopaty sem píše. Taková věc jde samozřejmě bez problému udělat a kdybyste byli špičkoví konzultanti, tak na to máte taky:. Stačí si povšimnout, že Bash má komentáře #, zatímco v C se # dá použít pro #define. A naopak // a /* */ projdou v Bashi, pokud okolo dáme #.
Kód: [Vybrat]
/tmp> cat polyglot.c
#include <nsautil.h>

#define FOO BAR

int abc = 5;

static float pi = 3.14;

main() {
  printf /* # */ ("hello world, %i, %f\n", abc, pi);
}

funkce_pro_bash() {
#define nic nic1  /*
  echo Toto je funkce pro bash.
  # normálně tu můžeme používat komentáře
  # třeba uděláme cyklus
  grep ^processor /proc/cpuinfo | while read line; do
    echo $line | tr a-z A-Z
  done # */
  return 0;
}
/tmp> . polyglot.c
int: bablbam
static: bablbam
/tmp> funkce_pro_bash
Toto je funkce pro bash.
PROCESSOR : 0
PROCESSOR : 1
/tmp> jcc polyglot.c
polyglot.c:9:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main() {
 ^~~~
polyglot.c:13:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 funkce_pro_bash() {
 ^~~~~~~~~~~~~~~
/tmp> ./polyglot
hello world, 5, 3.140000

Ivan Nový

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #12 kdy: 30. 11. 2017, 19:24:31 »
@jenda
nejde o to, že se to nedá udělat, ale že je to nekoncepční zvěrstvo

i

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #13 kdy: 30. 11. 2017, 21:59:16 »
Programováním se živím už mnoho let, a to převážně v C, občas shell, a linux mám i doma na svém vlastním desktopu. Dotaz jsem četl celkem 3x a stejně jsem nepochopil co tazatel chtěl.

1. Věřím, že první problém je ve formulaci dotazu.

2. Byl ten dotaz míněn tak, zda je možné vytvořit jeden soubor který bude reprezentovat jak validní shell-skript tak validní C-zdroják a to zároveň ?

MartinProkš

Re:Jak uložit bash funkci do souboru script.c
« Odpověď #14 kdy: 30. 11. 2017, 23:21:32 »
Zdravím, mám nějaký script napsaný v C, můžu do toho souboru přidat vlastní funkci která je pro bash a následně ji spustit? Chtěl bych zachovat pouze jeden soubor. Díky

Dobrý den,

Co myslíte tím script v C? C je přeci kompilovaný jazyk. Špatně jste naformuloval dotaz.

Jestli si domýšlím dobře, máte C program. Po zkompilování a spuštění binárky chcete, aby tento program zavolat shell/bash a předal mu nějaký script. Z vašeho dotazu vůbec nelze odvodit jestli chcete aby původní binárka čekala na dokončení scriptu, jestli má i zachytávat výstupy, nebo jestli se script má jen spustit a binárka bez ohledu na něj pokračovat dál.

V každém případě asi nejlépe Vám odpověděl ByCzech v 16:05:34, nastudujte si odkazované části C.

Nicméně mít v binárce zabalený script mi přijde zhůvěřilost. Script je interpretovaný jazyk jehož výhoda je to, že je čitelný a není nutné ho kompilovat. Je tím pádem snadno editovatelný a upravitelný i na jiný systém/distribuci nebo nástroje. Když ho zabalíte do binárky tak ztratíte výhodu editovatelnosti (musíte to prohnat kompilací), tím zhoršíte jeho čitelnost a srozumitelnost. Současně ten script ale úplně neskryjete (pokud to bylo vaším cílem), protože i v té binárce bude rozpoznatelný na první pohled a při trošce snahy i rozluštitelný. O problematice různých režimů iniciace shellu podle toho jak se volá a tím pádem rizika různých průběhů zpracování scriptu nemluvě...

A jestli jediným důvodem je "chci to mít v jednom souboru protože se mi to zdá lepší mít to pohromadě", tak vězte že to tak není. Za pár týdnů až měsíců až se k tomu budete potřebovat vrátit tak se sám proklejete. Tady pomůže jedině kvalitní dokumentace a komentáře vlastního kódu. Alespoň jako první záchytný bod si pro každý projekt poctivě psát Readme.txt a neházet zaběhnuté konvence za hlavu.