Zapisać bieżący katalog w zmiennej używając Bash?

111

To, co próbuję zrobić, to znaleźć bieżący katalog roboczy i zapisać go w zmiennej, aby móc uruchomić export PATH=$PATH:currentdir+somethingelse. Nie jestem do końca pewien, czy mają zmienną, która domyślnie zawiera cwd.

Jak zapisać bieżący katalog w zmiennej za pomocą Bash?

Stupid.Fat.Cat
źródło
więc aby zapisać go w zmiennej, zrobiłbym mydir =. ?
Stupid.Fat.Cat,
1
tak właśnie przetestowano z mydir =. to ls $ mydir - ale to jest względne, więc będzie to pwd z dowolnego miejsca, w którym go uruchomisz
mcalex
dzięki! miejmy nadzieję, że to
zadziała
Och, miałem trochę spacji. tt $ {PWD} powinno działać. ha ha. ...
ups

Odpowiedzi:

189

To zapisuje bezwzględną ścieżkę bieżącego katalogu roboczego do zmiennej cwd:

cwd=$(pwd)

W swoim przypadku możesz po prostu:

export PATH=$PATH:$(pwd)+somethingelse
sampson-chen
źródło
1
z jakiegoś powodu, jeśli zmienię katalog na inny, zaktualizuje to również cwdzmienną. Na przykład, jeśli wywołuje pwdfunkcję za każdym razem ... dpaste.de/Kn7F Jak mogę tego uniknąć?
tutuca
1
$CWDmoże być specjalną (zarezerwowaną) zmienną środowiskową w Twojej powłoce. Zamiast tego wypróbuj inną nazwę, na przykład$CWD_MY_VAR
sampson-chen
Korzystanie z grawerunków robi to samo.
tutuca
1
Dlaczego po prostu nie użyć "$PWD"?
leetbacoon
28

Mam w moim .bash_profile:

function mark {
    export $1=`pwd`;
}

więc za każdym razem, gdy chcę zapamiętać katalog, mogę po prostu wpisać, np. zaznaczyć tam .

Następnie, gdy chcę wrócić do tej lokalizacji, po prostu wpisuję tam cd $

gerardw
źródło
Działa dobrze, ale w przypadku ścieżek ze spacjami, np. „Dysk Google”, musisz zrobić, cd "$foo"aby cała ścieżka została odczytana
mercergeoinfo
3
Aby obejść problem ze spacjami w ścieżce, zmień export $1=`pwd` na, export $1="`pwd`" a następnie podczas wywoływania takich ścieżek użyj cd "$foo"zamiast po prostucd $foo
mercergeoinfo
mercergeoinfo: Ściśle mówiąc, cudzysłowy export $1="`pwd`"nie są potrzebne, ponieważ podział na słowa nie występuje po prawej stronie zadania, chociaż cytowanie rozszerzeń jest dobrym nawykiem.
Larry
2
Zobacz także cdable_varspisać po prostucd there
John Cummings,
4

Twoje zadanie ma dodatkowe $:

export PATH=$PATH:${PWD}:/foo/bar
Chepner
źródło
3

aby uzyskać względną odpowiedź, użyj.

test z:

$ myDir=.
$ ls $myDir
$ cd /
$ ls $myDir

Pierwsza lspokaże ci wszystko w bieżącym katalogu, druga pokaże ci wszystko w katalogu głównym ( /).

mcalex
źródło
1

bieżąca zmienna katalogu roboczego, tj. pełna ścieżka / home / dev / other

dir=$PWD

wydrukuj pełną ścieżkę

echo $dir
Piyush Sharma
źródło
0

Jeszcze jeden wariant:

export PATH=$PATH:\`pwd`:/foo/bar
motyw
źródło
0

Możesz użyć zmiennej wbudowanej powłoki PWD, na przykład:

export PATH=$PATH:$PWD+somethingelse
simmerlee
źródło