Portál AbcLinuxu, 10. května 2025 05:34
cd `pwd`
$ 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.)
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)"
.
scriptHome="$(dirname "$(readlink -f "$0")")"
Uvodzovky su len pre zvrhly pripad, ak by cesta obsahovala medzery.
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!
tar cf - adresář | (cd cíl; tar xf -)
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?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.