geçerli dizine bas / pop?


66

Bash ile mevcut çalışma dizinine basıp çıkarmanın bir yolu var mı? Yazmayı denedim bash;cd dir; ./dostuff;exit;ama şu anki dizin dir.

linux  bash 

Yanıtlar:


91

Var pushdvepopd

Bash ziyaret ettiğiniz dizinlerin geçmişini tutacaktır, sadece sormanız gerekiyor. Bash, geçmişi bir yığında depolar ve yığını yönetmek için push ve popd komutlarını kullanır.

Okumak için daha fazla

Örnek:

$ pwd; pushd /tmp; pwd; popd; pwd
/home/me
/tmp ~
/tmp
~
/home/me

1
Bağlantıdan alıntıpushd Saves the current directory on the top of the directory stack and then cd to dir. With no arguments, pushd exchanges the top two directories.
Usta Şefi

31

Arama bash, kendi girişi olan yeni bir alt kabuk başlatır; diğer komutların hiçbiri çıkana kadar çalıştırılmaz. Parens ile çalıştırılacak komutları çevreleyen yeni bir alt kabuk da başlatacak, ancak içindeki komutları çalıştıracaktır.

( cd dir ; ./dostuff )

1
Parlak! Amaç sadece farklı bir dizinde komut çalıştırmak (örneğin, bir bağımlılığı güncellemek) olduğunda itmek / patlatmaya gerek yok, sonra güncel olana geri dön.
Dan Dascalescu

12

Birden fazla dizin geçmişi seviyesine ihtiyacınız yoksa, şunları da yapabilirsiniz:

cd foo
# do your stuff in foo
cd -

pushd/ İle karşılaştırıldığında popd, bunun cd foobaşarısız olması durumunda yanlış dizinde kalmanızın dezavantajı vardır cd -.

(Muhtemelen cd -dış senaryolarda daha kullanışlıdır. “Hadi olduğum yere geri dönelim.”)


4

Dizin değişikliklerimi takip etmek için takma adı kullanıyorum, böylece 'cd' kullandığım yere geri dönebildiğim bir yerde 'cd' ya da 'cd ..' vb.

alias pushdd="pushd \$PWD > /dev/null"
alias cd='pushdd;cd'
alias ssh='ssh -A'
alias soc='source ~/.bashrc'
#below to go back to a previous directory (or more)
alias popdd='popd >/dev/null'
alias cd.='popdd'
alias cd..='popdd;popdd'
alias cd...='popdd;popdd;popdd'
alias cd....='popdd;popdd;popdd;popdd'
#below to remove directories from the stack only (do not 'cd' anywhere)
alias .cd='popd -n +0'
alias ..cd='popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0;popd -n +0'

1
Bu kodun ne yaptığını daha ayrıntılı olarak açıklayabilir misiniz?
bwDraco

Zekice. Sevdiğim bazı şeyleri yapmak için benim popa ve popa etrafında takma adlarım var. Dizin yığınını her zaman kullanırım. İnsanları bir yerde cd izlemekten nefret ediyorum ve sonra bir önceki dizini kesip yapıştırmak için geriye doğru kaydırıyorum. Çalışmamın çoğunu kotalarım nedeniyle ana dizimde yapamıyorum, bu nedenle ağdaki havuzlanmış depolamayı kullanmam gerekiyor.
Michael Mathews

1
Takma ad ..cdyeterince sağlam mı? yığından yalnızca son 10 öğeyi çıkarmış gibi görünüyor.
reynoldsnlp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.