Jak mohu získat aktuální pracovní adresář? [duplicate]

Tato otázka již má odpovědi zde :

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 & Linux 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 o 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 budou existovat některé stroje, na nichž běží skořápky, které nepodporují novější notaci ' a novější $(). Zatímco oba jsou definovány POSIXem, $() je dnes upřednostňován, protože se jedná 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. Například:

$ 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. Vzhledem k tomu, ž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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *