Příklad v shellu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Příklad v shellu – C / C++ – Fórum – Programujte.comPříklad v shellu – C / C++ – Fórum – Programujte.com

 

Andy
~ Anonymní uživatel
42 příspěvků
9. 5. 2010   #1
-
0
-

Ahoj, vím, že to sem až tak nepatří, ale unix má blízko k C, tak zde možná někdo bude vědět.
Jak v shellu vytvořit soubor, kde na každém řádku je login uživatele a všechny skupiny, do kterých patří?

Zkoušel to pomocí sedu, problém je, že beru vzor z jednoho souboru a hledám shodu v jiném. Dá se to v sedu nějak specifikovat, co v kterém souboru? Nebo to vyřešit vnořeným příkazem, něco jako sed '/vzor/'`grep vzor soubor2`'/' soubor1? Anebo, pokud sed na takový příklad nestačí, jak jinak by to šlo udělat?

Nahlásit jako SPAM
IP: 85.160.76.–
KIIV
~ Moderátor
+43
God of flame
9. 5. 2010   #2
-
0
-

tak zalezi na tom jestli to nemuzes udelat treba v perlu..

bash sam o sobe ma moznost vytvaret takovou obdobu funkci.. takze kdyz zvladnes udelat funkci, ktere predas jedhoho uzivatele a ta ti k nemu vypise vsechny skupiny, do kterych patri tak ses prakticky za vodou

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Andy
~ Anonymní uživatel
42 příspěvků
9. 5. 2010   #3
-
0
-

Smí se používat jen shellovské příkazy, tak by to mělo jít i jen pomocí nich. Do funkcí bych se příliš nepouštěl, ale obvykle kód ve funkci a stejný mimo ni dělá to samé. Neexistuje nějaké řešení pomocí shellovských editorů (ed, sed, grep, awk...)?

Nahlásit jako SPAM
IP: 85.160.76.–
KIIV
~ Moderátor
+43
God of flame
9. 5. 2010   #4
-
0
-

co sme meli na vejsce podobny zadani tak jediny zpusob jak toho dosahnout bylo pouzit ty funkce

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
luky
~ Anonymní uživatel
25 příspěvků
10. 5. 2010   #5
-
0
-

Asi nejsnáze by to šlo udělat s groups:

cut -d: -f1 /etc/passwd |xargs groups >soubor


Ale asi jde o to, abyste se naučili obecně kombinovat příkazy a v tom případě to děláš správně - tedy z /etc/passwd vytáhnout jména uživatelů a postupně pro každého z /etc/group vytáhnout skupiny.
A souhlasím s KIIV, že by se na to hodila funkce.

Nahlásit jako SPAM
IP: 213.211.51.–
Andy
~ Anonymní uživatel
42 příspěvků
10. 5. 2010   #6
-
0
-

Máš pravdu s tím kombinováním příkazů, dokonce v zadání je nepoužívejte groups. Objevil jsem příkaz id, který také vypíše skupiny, ale krom toho ještě jejich gid a uid uživatele. Pak by stačilo číst jen z /etc/passwd a z výstupu id vybrat skupiny.

Jak je to s těmi funkcemi v bashi, nevracejí jen návratovou hodnotu 0 - 255?

Nahlásit jako SPAM
IP: 85.160.107.–
ian0
Stálý člen
10. 5. 2010   #7
-
0
-

Andy napsal:
Máš pravdu s tím kombinováním příkazů, dokonce v zadání je nepoužívejte groups. Objevil jsem příkaz id, který také vypíše skupiny, ale krom toho ještě jejich gid a uid uživatele. Pak by stačilo číst jen z /etc/passwd a z výstupu id vybrat skupiny


Ano, pokud je povolen id (resp. pokud není zakázán :-) ), tak bych to řešil takhle:
for i in `cat /etc/passwd | cut -d: -f1`; do echo -n "$i: "; id -nG $i;  done > file

Andy napsal:
Jak je to s těmi funkcemi v bashi, nevracejí jen návratovou hodnotu 0 - 255?


Ano, ale ty můžeš vracet z funkce třeba přes proměnnou nebo pomocný soubor.

Nahlásit jako SPAM
IP: 89.24.135.–
-- ian
Andy
~ Anonymní uživatel
42 příspěvků
10. 5. 2010   #8
-
0
-

Zkoušel jsem preparovat výstup id v sedu, neúspěšně, ale ty přepínače echo -n a id -nG to vyřešily, díky moc.

Funkce tedy nejspíš běží ve stejném procesu, já myslel, že běží v subprocesu jako skript, kde po skončení proměnné zmizí. Tak je asi začnu používat :)

Nahlásit jako SPAM
IP: 85.160.107.–
ian0
Stálý člen
11. 5. 2010   #9
-
0
-

To Andy : voláním funkce se nevytváří nový process, funkce se provádějí pořád v jedné instanci shellu, proto můžeš normálně používat proměnné

Nahlásit jako SPAM
IP: 89.24.135.–
-- ian
Andy
~ Anonymní uživatel
42 příspěvků
12. 5. 2010   #10
-
0
-

Už je mi to jasné. Díky.

Nahlásit jako SPAM
IP: 85.160.102.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 62 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý