Portál AbcLinuxu, 17. dubna 2024 01:52


Dotaz: Vystup prikazu jakozto parametr jineho prikazu

18.6.2014 14:27 Jiri463
Vystup prikazu jakozto parametr jineho prikazu
Přečteno: 162×
Odpovědět | Admin
Chci se zeptat zda existuje nejaky zpusob jak udelat nasledujici vec.

do konzole na pisi: pwd vypise se mi: /home/user/

Lze nejakym zpusobem vlozit vraceny string do jineho prikazu. Napr. pomoci nejake promene atd. Napr: cd $PROMENA_NAVRAT_HODNOTY

Nebo se to da resit jeste nejak jinak? Zpusob: pwd | cd znam ale ten je omezujici v tom, ze predava pouze jeden parameter. Dik
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.6.2014 16:10 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
cd `pwd`
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
lobotron avatar 18.6.2014 16:12 lobotron | skóre: 5
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jestli jsem spravne pochopil dotaz, tak presne tohle delaji zpetne apostrofy. Pouziti napr:
$ cd `pwd`
Funguje to tak, ze se provede prikaz v apostrofech (pwd) a jeho vystup se "napise" misto toho, kde byly apostrofy a pak se provede zbytek. Nas konkretni priklad tedy neudela nic. (Zpetne apostrofy jsou na EN klavesnici vlevo vedle jednicky.)

We must steer between the "romantics" and the "ostriches".
lobotron avatar 18.6.2014 16:13 lobotron | skóre: 5
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Sakra, jsem moc pomalej. :-)
We must steer between the "romantics" and the "ostriches".
18.6.2014 16:27 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zpusob: pwd | cd znam ale ten je omezujici v tom, ze predava pouze jeden parameter.

Žádný takový způsob neexistuje. Zaprvé, nepředává se tady žádný parametr. Pouze se standardní výstup příkazu pwd přesměruje na standardní vstup příkazu cd. Jak správně říká manuálová stránka, příkaz cd standardní vstup ignoruje. Zachová se v tomto případě stejným způsobem, jakým se chová bez parametrů, tedy přepne se do domovského adresáře uživatele. Výstup z pwd se v tomto případě nepřečte a nijak nevyužije.

Výstup nějakého příkazu se dá použít jako (obecně) několik parametrů stylem `příkaz` nebo $(příkaz). Druhý způsob má tu výhodu, že se dá zanořit v několika úrovních bez složitého escapování.

Pokud má výstup z příkazu tvořit vždy pouze jeden parametr, i když obsahuje bílé místo, budou potřeba i uvozovky, tj. "`příkaz`" nebo "$(příkaz)".

18.6.2014 16:40 soyo
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Syntax $(prikaz) ma tu vyhodu, ze sa da vnarat. Napriklad hladanie domovskeho adresara skriptu, ktory je spusteny pomocou symbolickeho linku napr. v ~/bin:

scriptHome="$(dirname "$(readlink -f "$0")")"

Uvodzovky su len pre zvrhly pripad, ak by cesta obsahovala medzery.
Jendа avatar 18.6.2014 16:55 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Vždyť to píše:
Druhý způsob má tu výhodu, že se dá zanořit v několika úrovních bez složitého escapování.
`` jde vnořovat taky, ale z těch \ se brzo zblázníš.

< Jenda`_> AAA: Co je tohle za featuru shellu?
< Jenda`_> ~/tmp> echo `echo "a++b"|sed -re "s/\+/\\\+/g"`
< Jenda`_> a++b
< Jenda`_> ~/tmp> echo $(echo "a++b"|sed -re "s/\+/\\\+/g")
< Jenda`_> a\+\+b
< Jenda`_> ~/tmp> echo "a\+\+b" > fil
< Jenda`_> ~/tmp> echo `cat fil`
< Jenda`_> a\+\+b
< Jenda`_> magic
< AAA> Jenda`_: to bude nejaka compatibility prasarna... nevim, to jsem snad jeste nepotkal
< Jenda`_> Dělá to i v sh z busyboxu
<@CCC> to je hnus teda
< AAA> proc to nedela kdyz napisu rovnou /bin/echo "a+\+b" ?
< AAA> to mi na tom prijde nejtajemnejsi
< Jenda`_> Já bych si hlavně řekl - no budiž, `` to nějak divně interpretujou. Ale nechápu, proč je rozdíl mezi `echo` a `cat`
< AAA> no asi ze stejneho duvodu jako proc nefunguje rovnou echo "a\+b"
< Jenda`_> (pro rejpaly, je rozdíl i mezi `/bin/echo` a `cat`)
< Jenda`_> ~> echo "a\+b"
< Jenda`_> a\+b
< Jenda`_> Co na tom nefunguje?
<@BBB> http://themetapicture.com/the-best-way-to-recognize-the-artists-of-paintings
< AAA> aha
< AAA> uz to chapu
< AAA> Jenda`_: spravne se totiz v `` pise sed -re "s/\+/\\\\\\\+/" :)
< AAA> hledam citaci ve standardu
< Jenda`_> ...
<@BBB> When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by  $, `,
\.  The first backquote not preceded by a backslash terminates the command substitution.  When using the $(command) form, all characters between the pare
up the command; none are treated specially.
<@BBB> To pise manual ^
< AAA> no, ve standardu (jak skorocituje stevko) to neni napsane uplne primocare, ale v zasade to vicemene musi byt naimplementovane ta
po zacatku ` interpretujes vsechny \\ (a \$, \`) az po matching ` - to musis udelat, abys dokazal handlovat vnorene ``
< Jenda`_> ` jdou vnořovat? :)
< AAA> a tohle ze sed -re "s/\+/\\\\\\\+/"  udela sed -re "s/\+/\\\+/"
<@BBB> takze tie \ v skripte pre sed ti zozerie bash este pred spustenim sedu !asi!.
<@BBB> Command substitutions may be nested.  To nest when using the backquoted form, escape the inner backquotes with  backslashes.
<@BBB> Jenda`_: idu ^
< AAA> Jenda`_: ano... echo `echo \`echo \\\`echo brm\\\`\``
< Jenda`_> Muaddib: sed -re "s/\+/\\\\\\\+/"
< Muaddib> Jenda`_: Mluvis jako re re retard!
<@BBB> v bashi sa neda rozumne programovat
< AAA> Jenda`_: ale prave kuvli tem \ se to chova trochu neintuitivne, navic pocet \ u vnoreni roste exponencialne
< AAA> Jenda`_: (jinak mne to samozrejme melo trknout hned, ale odhalil jsem to az pohledem do strace -f sh -c 'echo `echo "a+b"|sed -re "s/\+/\\\+/"`')
(pseuonymizováno! :-))
18.6.2014 16:47 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Naštěstí to tak nefunguje, jinak bych nemohl používat svůj oblíbený způsob kopírování dat
tar cf - adresář | (cd cíl; tar xf -)
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Jendа avatar 18.6.2014 16:57 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
Nevidím spor s tím, co napsal Andrej. To, že cd standardní vstup nevyužije, znamená, že ho může využít další příkaz, v tomto případě tar xf. Btw. proč nekopíruješ cp -a?
18.6.2014 17:17 randa
Rozbalit Rozbalit vše Re: Vystup prikazu jakozto parametr jineho prikazu
To by bylo složitější.

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.