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ń do bieżącego katalogu roboczego lub do dowolnego katalogu nadrzędnego tego katalogu, aby określić, jaka byłaby ta nazwa ścieżki, wartość PWD jest nieokreślony. Przypisania do tej zmiennej mogą zostać zignorowane. Jeśli aplikacja ustawia lub cofa wartość PWD, zachowanie narzędzi cd i pwd jest nieokreślone.
Aby uzyskać bardziej ogólną odpowiedź, sposobem zapisania danych wyjściowych polecenia w zmiennej jest umieszczenie polecenia w $()
lub ` `
(lewe apostrofy):
var=$(command)
lub
var=`command`
Z tych dwóch $()
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 $()
pozwala na zagnieżdżenie 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 wykorzystywać lewy apostrof lub znaki 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