Komentáře
- Související: Získání zdrojový adresář skriptu Bash zevnitř
- Toto není duplikát otázky, pro kterou je aktuálně označen jako jeden. Tyto dvě otázky by měly být porovnány alespoň na základě jejich názvů (a také jejich odpovědí). To, že odpověď na tuto otázku již pokrývá jiná, je nebo by měla být irelevantní.
- @KennyEvitt je jedním z hlavních důvodů, které uzavíráme, právě proto, že odpověď má byly uvedeny jinde. Ve skutečnosti je zde hlavní otázkou, jak přiřadit výstup příkazu proměnné, která je pokryta dupe. Také jsem dal odpověď na tento konkrétní případ, takže jsou pokryty všechny základy. Opětovné otevření by nemělo žádnou výhodu.
- @terdon Jako zdroj dostupný a určený pro celou populaci uživatelů systému Unix & je to cenná otázka, i když původní tazatel opravdu potřeboval odpověď, která již byla uvedena jinde. Myslím, že by tato otázka měla být upravena tak, aby lépe odpovídala jejímu názvu, a měla by být znovu otevřena, aby neumožňovala další činnost, ale aby ne naznačovala, že tato otázka je ' bad '.
- @KennyEvitt uzavření jako duplikát v žádném případě neznamená, že otázka je špatná! Tato otázka zde zůstane navždy zodpovězena. Pokud opravdu chcete vědět, jak získat aktuální pracovní adresář, najdete svou odpověď zde. Pokud chcete vědět, jak uložit výstup příkazu do proměnné, najdete zde také odpověď pomocí odkazu na dupe. V každém případě to není ' opravdu něco, co bych měl udělat sám, pokud máte pocit, že by to mělo být znovu otevřeno, otevřete prosím diskusi na Unix a Linux Meta , kde by takové věci měly být vyřešeny.
Odpovědět
Tam „Není třeba to dělat, je to již v proměnné:
$ echo $PWD /home/terdon
PWD
proměnná je definována POSIX a bude fungovat na všech skořápkách kompatibilních s POSIX:
PWD
Nastaveno shellem a obslužným programem cd. V prostředí bude hodnota inicializována z prostředí následujícím způsobem. Pokud je hodnota pro PWD předána prostředí v prostředí, když je spuštěna, hodnota je absolutní cesta aktuálního pracovního adresáře, která není delší než {PATH_MAX} bajtů včetně koncového nulového bajtu a hodnota neobsahuje jakékoli součásti, které jsou tečkované nebo tečkované, pak shell nastaví PWD na hodnotu z prostředí. Jinak, pokud je hodnota pro PWD předána do prostředí v prostředí, když je spuštěna, hodnota je absolutní cesta aktuálního pracovního adresáře a hodnota neobsahuje žádné komponenty, které jsou tečka nebo tečka-tečka, pak to není specifikováno, zda shell nastaví PWD na hodnotu z prostředí nebo nastaví PWD na cestu, která by byla výstupem pwd -P. V opačném případě obslužný program sh nastaví PWD na cestu, která by byla vydána programem pwd -P. V případech, kdy je PWD nastavena na hodnotu z prostředí, může tato hodnota obsahovat komponenty, které odkazují na soubory typu symbolický odkaz. V případech, kdy je PWD nastaveno na cestu, která by byla vydána programem pwd -P, pokud není dostatečné oprávnění pro aktuální pracovní adresář nebo pro kteréhokoli rodiče tohoto adresáře, aby bylo možné určit, jaký název cesty bude, je hodnota PWD nespecifikováno. Přiřazení k této proměnné může být ignorováno. Pokud aplikace nastaví nebo zruší nastavení PWD, chování obslužných programů cd a pwd bude nespecifikováno.
Obecnější odpověď: způsob, jak uložit výstup příkazu do proměnné, je uzavřít příkaz do $()
nebo ` `
(backticks):
var=$(command)
nebo
var=`command`
Z těchto dvou je $()
se dává přednost, protože je snazší vytvářet složité příkazy jako command0 $(command1 $(command2 $(command3)))
.
Odpovědět
dir=$(pwd)
Toto je přenositelnější a upřednostňované před metodou zpětného tahu.
Pomocí $()
můžete vnořit příkazy
např .: mech_pwd=$(pwd; echo in $(hostname))
Komentáře
- Ve skutečnosti, pokud vůbec, jsou pozadí přenositelnější, protože předcházejí formátu
$()
.Je možné, že stále existují nějaké stroje, které běží s pouzdry, které nepodporují novější notaci$()
. ' t. Zatímco oba jsou definovány POSIXem,$()
je dnes upřednostňován, protože jde o čistší syntaxi a lze jej vnořit ($(command1 $(command2))
) do daleko jednodušší způsob než backticks.
Odpověď
Můžete použít buď proměnnou prostředí $PWD
nebo napište něco jako:
dir=`pwd`
Odpovědět
Chcete-li uložit výstup příkazu pwd
do proměnné, musíte použít substituci příkazu. Substituce příkazů může používat zpětné znaky nebo znaky dolaru. Takto:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Odpověď
Hodnota aktuálního pracovního adresáře může být být odlišný. Pokud jste k získání aktuálního adresáře použili symbolické odkazy, pwd poskytne jiné výsledky než / usr / bin / pwd. Protože používáte bash, použil bych:
dir=$(/usr/bin/pwd)
nebo podle komentáře:
dir=$(pwd -P)
Protože se mi nelíbí zpětné uvozovky, protože se nemohou vnořit.
Komentáře
- dir = $ (pwd -P) také funguje.