Portál AbcLinuxu, 25. dubna 2024 11:32


Dotaz: Jak na promenne v bashi ?

8.2.2004 01:41 Thomas
Jak na promenne v bashi ?
Přečteno: 293×
Odpovědět | Admin
Zdravim !
Mam takovy opravdu zacatecnicky dotazek ohledne BASHe
Porad nemuzu prijit na to jak dostat vystup nejakeho
programu do promenne. Napr. who | cut -d" " -f1
mi vypise prvniho uzivatele,ale jak tuto hodnotu dostat
do nejake vlastni promenne abych s ni pak mohl dale
pracovat v danem skriptiku ? Diky za rady. Tom.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.2.2004 03:58 Ritchie | skóre: 27 | blog: Ritchie's | Berlin
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
promenna=$(prikaz), zkratkou je zápis promenna=`prikaz`. Jinak neškodí RTFM.
8.2.2004 08:35 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
No mě who | cut -d" " -f1 vypíše všechny uživatele. Prvního uživatele by aspoň na mém systému vypsalo
who | head -n1 | cut -d" " -f1
Toho bych do proměné dostal jednoduše
foo=$(who | head -n1 | cut -d" " -f1)
Pokud už v příslušném scriptu máte zpracované parametry, nebo vás nezajímají, tak elegantní cesta je taky pomocí set. Vyzkoušejte:
set $(who)
while [ -n "$1" ]
do 
  echo $1
  shift 
done
nebo pro vypsání všech uživatelů jen jednou (a malou variaci na test konce)
set $(who | cut -d" " -f1 | sort | uniq)
while :
do 
  echo $1
  shift || break 
done
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
8.2.2004 08:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Úplně jsem zapoměl na obligátní man bash Fakt je to dobré čtení na dlouhé zimní večery, ale už jste to propásl, protože se blíží jaro :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
8.2.2004 08:51 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Pokud chceš brát ty uživatele postupně po jednom -- to je tedy obvykle v shellu špatný nápad, protože skoro všechno jde napsat jako roura zpracovávající stále celý seznam -- tak můžeš použít

pole (práci s poli v shellu už jsem tu párkrát popisoval, je to spíš už vyšší level):
users=($(who | cut -d' ' -f1 | sort -u))
read:
who | cut -d' ' -f1 | sort -u | \
while read user; do
  echo "$user"
done
Pokud chceš ekvivalent
users=$(who | cut -d' ' -f1)
tak je lepší si přečíst who(1) a použít -q:
users=$(who -q | head -n1)
8.2.2004 10:47 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Jako vždy inspirativní
users=($(who | cut -d" " -f1  |  sort -u ))
for ((i=0;i<${#users[*]};i++)) 
do echo ${users[$i]}
done
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
9.2.2004 00:23 Thomas
Rozbalit Rozbalit vše Jak na promenne v bashi ?
Perfektni !!
To je presne co jsem chtel.
Dekuji vsem za uzasne rady a reseni. Uz jsem IN.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.