megjegyzések
- Kapcsolódó: belülről származó Bash szkript forráskönyvtára
- Ez nem másolata annak a kérdésnek, amelyre jelenleg egyként van jelölve. A két kérdést legalább a címük (és a válaszaik) alapján össze kell hasonlítani. Az, hogy erre a kérdésre a választ már lefedi egy másik, nem releváns, vagy ennek lennie kell.
- @KennyEvitt valójában az egyik fő ok, amit bezárunk, éppen azért van, mert a válasz másutt adták. És valójában itt a fő kérdés az, hogy hogyan rendelhető hozzá egy parancs kimenete egy változóhoz, amelyet a dupe lefed. Erre a konkrét esetre is megadtam a választ, így minden alapot lefedünk. Nem lenne előnye ennek újbóli megnyitásának.
- @terdon Ez a Unix & Linux felhasználók teljes állományának számára elérhető és szánt erőforrásként értékes kérdés, még akkor is, ha az eredeti kérdezőnek valóban csak máshol már megválaszolt válaszra volt szüksége. Ha van valami, úgy gondolom, hogy ezt a kérdést úgy kell szerkeszteni, hogy jobban megfeleljen a címének, és újra meg kell nyitni, hogy ne engedje meg a további tevékenységeket, de nem arra utal, hogy ez a kérdés ' rossz '.
- A @KennyEvitt duplikátumként történő lezárása semmiképpen nem jelenti azt, hogy a kérdés rossz! Ez a kérdés örökre itt marad, megválaszolva. Ha valóban tudni szeretné, hogyan szerezze be a jelenlegi munkakönyvtárat, itt megtalálja a választ. Ha csak azt akarja tudni, hogyan mentse el a parancs kimenetét egy változóba, akkor itt is megtalálja a választ a dupe linkjének követésével. Mindenesetre ez nem ' nem igazán valami, amit egyedül kellene tennem, ha erősen úgy érzi, hogy újra meg kell nyitni, kérjük, nyisson meg egy vitát a Unix és Linux Meta , ahol ezeket meg kell oldani.
Válasz
Ott “ezt nem kell megtenni, ez már benne van egy változóban:
$ echo $PWD /home/terdon
A PWD
változót a POSIX határozza meg , és az összes POSIX-kompatibilis héjon működik:
PWD
A shell és a cd segédprogram állítja be. A héjban az értéket a környezettől kell inicializálni az alábbiak szerint. Ha a PWD értéke a végrehajtás során a környezetben lévő héjhoz kerül, akkor az érték az aktuális munkakönyvtár abszolút elérési útja, amely nem hosszabb, mint {PATH_MAX} bájt, beleértve a befejező null bájtot, és az érték nem tartalmaz minden olyan pont, amely pont vagy pont, akkor a shellnek a PWD-t a környezeti értékre kell állítania. Ellenkező esetben, ha a PWD értékét végrehajtásakor átadjuk a környezetben lévő héjnak, akkor az érték az aktuális munkakönyvtár abszolút elérési útja, és az érték nem tartalmaz pontot vagy pontot tartalmazó összetevőket, akkor nincs meghatározva, hogy a shell beállítja-e a PWD-t a környezeti értékre, vagy a PWD-t a pathwyn-re állítja-e, amelyet a pwd -P adna ki. Ellenkező esetben az sh segédprogram a PWD-t arra az útvonalnévre állítja be, amelyet a pwd -P adna ki. Abban az esetben, ha a PWD értékét a környezettől állítják be, az érték olyan elemeket tartalmazhat, amelyek szimbolikus típusú fájlokra hivatkoznak. Azokban az esetekben, amikor a PWD beállítása a pwd -P által kiadott elérési útra van beállítva, ha az aktuális munkakönyvtárban vagy a könyvtár bármelyik szülőjében nincs elegendő engedély annak meghatározásához, hogy mi lenne az az útnév, akkor a meg nem határozott. A változóhoz való hozzárendeléseket figyelmen kívül lehet hagyni. Ha egy alkalmazás beállítja vagy kikapcsolja a PWD értékét, a cd és a pwd segédprogramok viselkedése nincs meghatározva.
Az általánosabb válaszért: A parancs kimenetének egy változóba történő mentésének módja az, hogy a parancsot $()
vagy ` `
(backticks) mappába foglalja:
var=$(command)
vagy
var=`command`
A kettő közül a $()
előnyös, mivel könnyebb olyan összetett parancsokat létrehozni, mint a command0 $(command1 $(command2 $(command3)))
.
Válasz
dir=$(pwd)
Ez sokkal hordozhatóbb, és előnyösebb a backticks módszerrel szemben.
A $()
használata lehetővé teszi a parancsok beágyazását
pl .: mech_pwd=$(pwd; echo in $(hostname))
Megjegyzések
- Valójában, ha van ilyen, a háttérképek sokkal hordozhatóbbak, mivel megelőzik a
$()
formátumot.Elképzelhető, hogy még mindig vannak olyan gépek, amelyek olyan kagylót futtatnak, amelyek nem ' nem támogatják az újabb$()
jelölést. Míg mindkettőt a POSIX határozza meg, a$()
-et ma előnyben részesítjük, mivel ez egy tisztább szintaxis és beágyazható ($(command1 $(command2))
) egy távoli egyszerűbb módszer, mint a backticks.
Válasz
Használhatja a , vagy írjon hasonlót:
dir=`pwd`
Válasz
A pwd
parancs kimenetének változóba történő mentéséhez parancs behelyettesítést kell használnia. A parancs behelyettesítéséhez backtickeket vagy dollár karaktereket használhat. Így:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Válasz
Az aktuális munkakönyvtár értéke másnak lenni. Ha szimbolikus linkeket használt az aktuális könyvtár megszerzéséhez, a pwd más eredményeket ad, mint az / usr / bin / pwd. Mivel a bash-t használja, a következőt használnám:
dir=$(/usr/bin/pwd)
vagy a megjegyzés szerint:
dir=$(pwd -P)
mivel nem szeretem az idézőjeleket, mivel nem tudnak fészkelni.
Megjegyzések
- dir = $ (pwd -P) is működik.