Tam „nie trzeba tego robić,” jest już w zmiennej:
$ echo $PWD /home/terdon
PWD
zmienna jest zdefiniowana przez POSIX i będzie działać na wszystkich powłokach zgodnych z POSIX:
PWD
Ustawiane przez powłokę i narzędzie cd. W powłoce wartość należy zainicjalizować ze środowiska w następujący sposób. Jeśli wartość PWD jest przekazywana do powłoki w środowisku podczas jej wykonywania, wartością jest bezwzględna ścieżka dostępu do bieżącego katalogu roboczego, która nie jest dłuższa niż {PATH_MAX} bajtów, łącznie z końcowym bajtem zerowym, a wartość nie zawiera jakiekolwiek komponenty, które są kropkami lub kropkami, to powłoka ustawi PWD na wartość ze środowiska. W przeciwnym razie, jeśli wartość PWD jest przekazywana do powłoki w środowisku podczas jej wykonywania, wartością jest bezwzględna ścieżka dostępu do bieżącego katalogu roboczego, a wartość nie zawiera żadnych komponentów, które są kropkami lub kropkami, to nie jest określone, czy powłoka ustawia PWD na wartość ze środowiska, czy ustawia PWD na ścieżkę, która byłaby wyprowadzana przez pwd -P. W przeciwnym razie narzędzie sh ustawia PWD na ścieżkę, która zostanie wyświetlona przez pwd -P. W przypadkach, gdy PWD jest ustawione na wartość ze środowiska, wartość może zawierać komponenty, które odwołują się do plików typu dowiązanie symboliczne. W przypadkach, gdy PWD jest ustawione na nazwę ścieżki, która byłaby wyprowadzana przez pwd -P, jeśli nie ma wystarczających uprawnień w bieżącym katalogu roboczym lub w jakimkolwiek nadrzędnym katalogu tego katalogu, aby określić, jaka byłaby ta ścieżka, wartością PWD jest nieokreślony. Przypisania do tej zmiennej mogą zostać zignorowane. Jeśli aplikacja ustawia lub wyłącza wartość PWD, zachowanie narzędzi cd i pwd jest nieokreślone.
Aby uzyskać bardziej ogólną odpowiedź, sposobem zapisania wyniku polecenia w zmiennej jest umieszczenie polecenia w $()
lub ` `
(odwrotne znaki):
var=$(command)
lub
var=`command`
Spośród nich $()
jest preferowany, ponieważ łatwiej jest tworzyć złożone polecenia, takie jak command0 $(command1 $(command2 $(command3)))
.
dir=$(pwd)
Jest to bardziej przenośne i preferowane rozwiązanie niż metoda grawerowania.
Użycie $()
umożliwia zagnieżdżanie poleceń
np .: mech_pwd=$(pwd; echo in $(hostname))
Komentarze
Musisz użyć podstawiania poleceń, aby zapisać wynik polecenia pwd
do zmiennej. Zastępowanie poleceń może używać odwrotnych apostrofów lub znaków dolara. W ten sposób:
$ mkdir "/tmp/new dir" $ cd "/tmp/new dir" $ CWD="$(pwd)" $ echo $CWD /tmp/new dir $ cd ~ $ echo $CWD /tmp/new dir $ pwd /home/ja
Wartość bieżącego katalogu roboczego może być innym. Jeśli użyłeś dowiązań symbolicznych, aby uzyskać bieżący katalog, pwd da inne wyniki niż / usr / bin / pwd. Ponieważ używasz basha, użyłbym:
dir=$(/usr/bin/pwd)
lub jak w komentarzu:
dir=$(pwd -P)
ponieważ nie lubię cytatów z tyłu, ponieważ nie mogą zagnieżdżać się.
Komentarze