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?


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

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 $


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,


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 ( /).


1

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

dir=$PWD

wydrukuj pełną ścieżkę

echo $dir

0

Jeszcze jeden wariant:

export PATH=$PATH:\`pwd`:/foo/bar

0

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

export PATH=$PATH:$PWD+somethingelse
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.