2009-10-28 13 views
20

chciałbym wyodrębnić bieżącą ścieżkę w zmiennej i używać go później w skrypciePierwsze bieżącą ścieżkę w zmiennej i używając go

coś takiego:

myvar = pwd 

Później:

cd myvar 

Ale moje umiejętności gryzienia zardzewiały na przestrzeni lat.

Jak mógłbym to zrobić?

+1

Oprócz odpowiedzi na rzeczywisty pytanie, można uruchomić polecenia w innym katalogu z sub-shell, takich jak: * * (cd xyz; rm temp. $$) ** – NVRAM

+0

bardzo fajne NVRM. Po napisaniu skryptu i walce z przypisaniem varibale po prostu wypróbuję twoje rozwiązanie i wypaczę kod za pomocą() i to działa! (Usunąłem jak 7 linii dziękując temu) –

Odpowiedz

43
myvar="$PWD" 
cd "$myvar" 

(. Cytaty są konieczne, jeśli ścieżka zawiera spacje)

+4

'$ (pwd)' może być dokładniejsze niż '$ PWD' (ale może czasami dać inną ścieżkę, niż się spodziewasz). – ephemient

+3

Cytaty nie są wymagane w zadaniu, chyba że w komendzie * są białe spacje * - stąd to działa dobrze: ** myvar = $ PWD ** – NVRAM

13

Coś jak to powinno działać:

myvar=`pwd` 
# ... 
cd $myvar 
+2

Ponieważ on wyraźnie pyta o bash, użyłbym alternatywnej składni: '$ (pwd)' jak to jest łatwiejsze do odczytania w mojej opinii. –

+2

Nie ma nic specyficznego dla bash o '$ (...)'; może i prawdopodobnie powinien być używany we wszystkich przypadkach. –

+0

@sgm: Nie wiedziałem o tym. Rzeczywiście wydaje się, że POSIX już to definiuje, a więc jeszcze mniej powodów do używania starych backticków. –

4

w bash

$ a=$(pwd) 
+0

Dzięki! "$ Pwd" nie działało dla mnie, ale tak się stało. –

3

Ind dodatek do komendy pwd i zmienną środowiskową $PWD, sugerowałbym również, żebyś wyglądała nto pushd/popd:

 
/$ pushd /usr 
/usr/
/usr$ pushd /var/log 
/var/log /usr/
/var/log$ popd 
/usr/
/usr$ popd 
/
/$ 
+1

Plus, sprawdź polecenie ** cd - ** (ze myślnikiem/łącznikiem) i automatyczną zmienną ** OLDPWD **. – NVRAM

+0

Nie znam tego! Dzięki – R0b0tn1k

0

on pracował dla mnie:

currentdir=$(cd -) 
printf "Generating content at $currentdir\n" 
Powiązane problemy