Câu hỏi Làm thế nào tôi có thể thay đổi thư mục trước thay vì đi lên?


Tôi hiện đang dành nhiều thời gian làm việc của tôi di chuyển qua lại giữa hai con đường rất xa cây và chuyển hướng từ gốc cây. Nó đánh tôi rằng cuộc sống của tôi sẽ dễ dàng hơn nhiều nếu có tranh cãi cho cd đưa người dùng đến thư mục cuối cùng họ đang ở.

Đó là, nếu tôi ở:

/etc/foo/bar/baz/moo

và sau đó nhập:

cd /var/lib/fubarred_app/blargh/logs

Tôi muốn có thể quay trở lại thư mục đầu tiên mà không phải gõ lại toàn bộ đường dẫn.

Phím bộ nhớ không cắt nó vì tôi sử dụng đủ các lệnh ở mỗi chỗ mà khó có thể quay trở lại và tìm đường đi mà tôi muốn vì chính nó là gõ chính nó.

Có một lệnh ngắn mà sẽ chỉ cho tôi đi đến thư mục trước đó?


209
2017-08-17 20:18


gốc


ngoài @bryanCâu trả lời tuyệt vời của bạn, bạn có thể xem xét việc tạo một cặp bí danh cho mỗi đường dẫn để bạn có thể chỉ cần gõ một cái gì đó như: "bazmoo" hoặc là "blarghlog"tại dấu nhắc :) - warren
Tại sao bạn không sử dụng Màn hình GNU? - Shi
Vỏ nào? điều đó tạo nên sự khác biệt lớn. - Randal Schwartz
@warren ditto. đó là cách ưa thích của tôi để làm mọi thứ. một nửa những gì tôi sử dụng máy tính của tôi đã có bí danh riêng của mình ngay bây giờ ... =) - ixtmixilix
Fasd thật tuyệt vời. Kiểm tra nó ra. - majkinetor


Các câu trả lời:


Lệnh

cd -

sẽ thực hiện trao đổi bạn cần trên hầu hết các hệ vỏ chính thống, phiên bản cũ hơn là

cd "$OLDPWD"

sẽ sử dụng biến môi trường có chứa thư mục làm việc trước đó.


Các Trang người dùng POSIX cho cd đề cập:

SỰ MIÊU TẢ

Nếu, trong khi thực hiện các bước trên, biến môi trường PWD được thay đổi, biến môi trường OLDPWD cũng sẽ được thay đổi thành giá trị của thư mục làm việc cũ (đó là thư mục làm việc hiện tại ngay trước cuộc gọi đến cd).

HOẠT ĐỘNG

- -Khi một dấu nối được sử dụng làm toán hạng, điều này sẽ tương đương với lệnh:

cd "$OLDPWD" && pwd 

mà thay đổi thư mục làm việc trước đó và sau đó viết tên của nó.


292
2017-08-17 20:23



Hãy ghi nhớ điều này thực sự phụ thuộc vào trình bao bạn đang sử dụng và vì bạn không chỉ định, thật khó để đưa ra câu trả lời "di động" không tồn tại. - Randal Schwartz
@ Randall, Có lẽ bạn có thể kết hợp tất cả các bình luận vỏ cá nhân của bạn thành một câu trả lời của Voltron-Shell. - hyperslug
@Randall. Tôi đã sử dụng bash. Nó hoạt động trong ksh và zsh. Nhân tiện, lần đầu tiên tôi học lập trình từ ấn bản năm 1994 Học Perl vì vậy xin lỗi tôi trong khi tôi fanboy một chút. :) - Yitzchak
Hmm, tôi đã sử dụng cd $OLDPWD cho điều này. Thật tốt khi các vỏ chính thống cung cấp một dạng ngắn hơn. - ulidtko
@sinni Một số hương vị làm có pushdvà ít nhất đó là nội dung dựng sẵn bash. - slhck


Ngoài câu trả lời của bryan, điều đáng nói đến cũng có pushd và popd, xây dựng các thư mục như một chồng. Điều này cũng có sẵn trên Windows NT; tuy nhiên, nó không có sẵn trong tất cả các hệ vỏ.

Ví dụ, chúng ta có thể đi đến ba thư mục khác nhau, và bạn sẽ luôn thấy chồng của bạn khi bạn gọi pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

Và khi bạn gọi popd ba lần liên tiếp, bạn nhận được các thư mục đó trong ngăn xếp theo thứ tự ngược lại. Đồng thời, ngăn xếp sẽ được làm trống một lần nữa.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Nếu bạn đang sử dụng Zsh; nó có tùy chọn AUTO_PUSHD, tùy chọn này sẽ tự động đẩy cdvào trong ngăn xếp.


105
2017-08-17 20:35



pushd và popd không có sẵn trong tất cả các shell. - Randal Schwartz
@ Wiesław: Thật sao? Tôi muốn bash có ... Tất nhiên, tôi có thể bí danh cd đến pushdvà chủ yếu là như vậy. - Chris Charabaruk
Hoặc bí danh pd để pushd và có cả hai. BTW pushd (hoặc pd, nếu bạn bí danh nó) tự nó hoán đổi thư mục hiện tại và thư mục cuối cùng đẩy, về cơ bản hoàn thành những gì 'cd -' nào. - JRobert
Tôi thích khái niệm nhưng chưa bao giờ quen với chúng. - Thorbjørn Ravn Andersen


Có một số chương trình "nhảy"

  • autojump (được duy trì với các tính năng cơ bản)
  • j2  (dường như không rõ ràng với một số tính năng nâng cao)
  • z (phiên bản duy trì "j" với các tính năng nâng cao)

Những dễ dàng bất kỳ loại điều hướng thư mục. Bạn sử dụng nó bằng cách cho một phần của con đường và nó chỉ hoạt động.

Trong trường hợp của bạn

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Bạn có thể gán bất kỳ chữ cái nào bạn muốn cho các chương trình này, "j" là truyền thống :)

j2 và z hỗ trợ nhiều cụm từ tìm kiếm, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... và nhiều tùy chọn hơn.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

13
2017-08-17 23:52



"j" rõ ràng là shell cụ thể. Bạn đã không nói điều đó. - Randal Schwartz
@Randal: Làm thế nào là nó cụ thể? Đó là một chương trình. - Fixee
Tôi là một thằng ngốc. :) Tôi thấy nó bây giờ. - Randal Schwartz


Ngoài cd - và cd $OLDPWD

Bạn có thể sử dụng tìm kiếm lịch sử bằng cách nhấn CTRL-R và nhập một vài chữ cái của cd lệnh bạn đã nhập trước đó. Nhấn CTRL-R nhiều lần sẽ mang những trận đấu cũ hơn.

Phương pháp này sẽ hữu ích hơn nếu bạn có nhiều hơn hai đường dẫn để thay đổi.


10
2017-08-18 09:44



CTRL-R sẽ không nhất thiết phải giúp đỡ. Bạn có thể đã ở trong / some / obscure / directory / deep và done "cd evendeeperdir" rồi chuyển đến ~ / somehere / khác. - justintime
Tuyệt quá! Nó hoạt động cho những thứ khác hơn cd, giúp đỡ nhiều! - Niloct


Bạn có thể sử dụng điều này để dễ dàng tạo bí danh cho các thư mục:

a() { alias $1=cd\ $PWD; }

a 1

và sau đó:

1

9
2017-08-18 01:50



Chỉ trên một vỏ hiểu bí danh và hàm. Không phải tất cả. - Randal Schwartz
do đó, việc bỏ qua này sẽ nhập alias = các bộ phận? hmmmm - Xen2050


bashmarks sẽ cho phép bạn đánh dấu một loạt các thư mục và chuyển qua lại giữa chúng với hoàn thành tab:

Để đánh dấu thư mục, chỉ cần chuyển đến thư mục đó, sau đó đánh dấu thư mục như sau:

bookmark foo

Dấu trang sẽ được đặt tên là "foo". Khi bạn muốn quay lại thư mục đó, hãy sử dụng:

go foo

Để xem danh sách các dấu trang:

bookmarksshow

Tab hoàn thành công trình, để đi đến bookmark shoobie, chỉ cần:

go sho[tab]

6
2017-08-18 08:54





Một khả năng khác là chỉ giữ hai cửa sổ mở, với một cửa sổ được đặt ở mỗi thư mục.


4
2017-08-18 03:00



Không có lịch sử chia sẻ mặc dù, nếu bạn sử dụng / chỉnh sửa các lệnh trước đó thường xuyên (có thể một thiết lập lại sẽ nhận được chúng ...?) - Xen2050
@ Xen2050 Xem tùy chọn vỏ share_history trong zsh. - Radon Rosborough


Tôi biết điều này không nói đúng câu trả lời cho câu hỏi của bạn, nhưng nó rất hữu ích trong việc đạt được mục tiêu đưa bạn đến các thư mục quan trọng của bạn.

trong bất kỳ gốc UNIX-bash nào bạn có thể sử dụng CDPATH để mở rộng thư mục tìm kiếm lệnh cd trong.

từ tệp .bashrc của tôi:

export CDPATH='.:~/source/'

CD tìm kiếm đầu tiên trong thư mục hiện tại của bạn, sau đó tìm kiếm trong thư mục-dự án mã hóa của tôi.

cd myproject

.. đưa tôi đến ~ / sources / myproject từ nơi nào tôi hiện đang đứng.

Tính năng nhỏ đơn giản đã giúp điều hướng thư mục của tôi rất nhiều.


4
2017-08-19 11:11



+1 Điều này thêm thư mục CDPATH vào cd's autocomplete (TAB) danh sách, đó là tốt. Nhưng nếu . Không bao gồm và nếu có một thư mục trong một thư mục CDPATH với cùng tên là một trong thư mục hiện tại của bạn, sau đó cd samename sẽ đi đến thư mục CDPATH và không phải một trong thư mục hiện tại, đó là Bad. Phải sử dụng cd ./samename để vào một thư mục dup. - Xen2050
Vâng, bình luận tốt. Luôn bao gồm .hoặc bạn sẽ trải nghiệm những thứ kỳ lạ. - phareim


Yup, cd - là con đường để đi nhưng tôi lo lắng về việc thiếu sức mạnh bạn có trong vỏ của bạn. popd và pushd cũng tốt, và j điều này cũng có vẻ tốt.

Tôi sẽ ném tiện ích của riêng mình vào chiếc nhẫn ... nó chỉ là thứ tôi đang xây dựng, tùy biến và di cư với tôi trong 10 năm qua và nó hoạt động tốt cho những gì tôi muốn.

Bài đăng trên blog cho tiện ích quản lý thư mục của tôi

Nếu nó làm việc cho bạn, sau đó tuyệt vời, nhưng nếu nó không sau đó hứa với tôi bạn sẽ nhận được một cái gì đó khác :) Bạn chỉ đơn giản là không thể sống với cd một mình.


3
2017-08-18 14:18





Nếu bạn chỉ có 2 thư mục, cách dễ nhất là, như đã đề cập,

cd -

Khi tôi đã có những điều như vậy trong quá khứ, tôi đã có một vài thủ thuật mà tôi đã làm, điều đó có thể hữu ích.

  1. Đặt các lệnh bí danh trong tệp .cshrc, giống như thế này

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. Liên kết các lối tắt đến đường dẫn quan tâm từ thư mục chính của tôi. Đây là một điều một lần.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

Điều này sẽ cho phép thay đổi một thư mục dễ dàng như:

   cd ~/moo
   cd ~/blargh

3
2017-08-19 03:08