Làm thế nào để cd vào một thư mục có tên này là -2 -2 (bắt đầu bằng dấu gạch nối)?


169

Tôi có một thư mục có tên:

-2

Tôi muốn cd vào nó nhưng cd phàn nàn:

bash: cd: -2: invalid option

Không thành công, tôi đã thử:

cd "-2"
cd '-2'
cd \-2

Bất kì giải pháp nào?

Chỉnh sửa: không có trình duyệt tệp như mc, v.v. có sẵn trên máy chủ.


2
Câu hỏi liên quan về superuser: superuser.com/questions/361573/ Cách
yms

Câu trả lời:


272

Ít nhất hai cách:

  1. Sử dụng --đối số.

    cd -- -2
    

    Điều này sử dụng một quy ước chung cho các công cụ GNU, đó là không xử lý bất cứ thứ gì xuất hiện sau --dưới dạng tùy chọn dòng lệnh.

    Như một nhà bình luận đã lưu ý, quy ước này cũng được xác định trong tiêu chuẩn POSIX :

    Hành vi mặc định: Khi phần này được liệt kê là "Không có.", Điều đó có nghĩa là việc triển khai không cần hỗ trợ bất kỳ tùy chọn nào. Các tiện ích tiêu chuẩn không chấp nhận các tùy chọn, nhưng chấp nhận toán hạng, sẽ nhận ra đây "--"là một đối số đầu tiên bị loại bỏ.

    Yêu cầu để nhận biết "--"là bởi vì các ứng dụng tuân thủ cần một cách để bảo vệ toán hạng của chúng khỏi mọi tùy chọn tùy ý mà việc triển khai có thể cung cấp dưới dạng một phần mở rộng. Ví dụ: nếu foo tiện ích tiêu chuẩn được liệt kê là không có tùy chọn và ứng dụng cần thiết để đặt cho nó một tên đường dẫn có dấu gạch nối hàng đầu, thì nó có thể thực hiện một cách an toàn như sau:

    foo -- -myfile
    

    và tránh mọi vấn đề với -m được sử dụng như một phần mở rộng.

    cũng như :

    Hướng dẫn 10:
    Đối số --nên được chấp nhận là dấu phân cách chỉ ra kết thúc của các tùy chọn. Bất kỳ đối số nào sau đây nên được coi là toán hạng, ngay cả khi chúng bắt đầu bằng '-'ký tự. Đối --số không nên được sử dụng như một tùy chọn hoặc như một toán hạng.

  2. Chỉ định đường dẫn rõ ràng:

    cd ./-2
    

    Điều này xác định đường dẫn đặt tên rõ ràng thư mục hiện tại ( .) làm điểm bắt đầu.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Đây là những biến thể ở trên. Bất kỳ số lượng các biến thể như vậy có thể có thể; Tôi sẽ để nó như một bài tập để người đọc khám phá tất cả chúng.


23
Nó không chỉ là GNU, nó là một phần của tiêu chuẩn POSIX. Xem 1.11 Mặc định mô tả tiện ích12.2 Nguyên tắc cú pháp tiện ích (hướng dẫn số 10). Từ cdtrang " cdTiện ích sẽ tuân theo ... phần 12.2".
Dietrich Epp

Bây giờ tôi chỉ tò mò về cách cd vào một thư mục có tên -!
sergiol

2
@sergiol Cách tương tự.
Michael Hampton

1
@ArtB: Không. Trích dẫn chỉ ảnh hưởng đến việc tách trường. Vì vậy, "hello world"một đối số nhưng hello worldlà hai, và "-2"giống như -2.
Dietrich Epp

1
@sergiol: Hoặc cd -- --hoặc cd ./--nên làm việc.
Keith Thompson

49

Điều này sẽ làm việc:

cd -- -2 

- có nghĩa là không còn lựa chọn nào nữa


26

Điều này sẽ hoạt động nếu '-2' trong thư mục hiện tại.

    cd ./-2

Bạn có thể tự động hoàn tất bằng cách nhập - và nhấn tab.


11

cd /home/...../-2 cũng hoạt động. Đưa ra đường dẫn đầy đủ để truy cập.


7

Chỉ để bổ sung, nếu bạn muốn xóa / xóa thư mục này, bạn có thể sử dụng lệnh sau:

rm -r -- -2

... Và chỉ để bổ sung, tôi sẽ không bao giờ làm điều đó, thay vào đó tôi sẽ sử dụng công cụ đồ họa như mc hoặc tôi sẽ đổi tên thư mục trước.
Nick

-1

Tôi biết câu hỏi này đã được trả lời. Nếu bất cứ ai có hoàn cảnh như tôi, thì đây là dành cho họ:

Tôi đã chạy một ứng dụng java và nó đang tìm kiếm một thư mục bắt đầu <path>, tôi phải thay thế nó bằng đường dẫn thích hợp trước khi chạy ứng dụng. Tuy nhiên, tôi đã quên làm điều đó. Các ứng dụng đã tạo ra một thư mục được gọi là <path>.

Tôi đã cố gắng cd <path>- đưa ra lỗi cho tôi "-bash: lỗi cú pháp gần dòng mới mã thông báo không mong muốn" Dựa trên đề xuất ở đây (tôi hiểu rằng thư mục này bắt đầu bằng - và không phải <) Tôi đã thử cd -- <path>. Tuy nhiên, tôi đã nhận được cùng một lỗi.

Khi tôi cố gắng cd \<path>\- điều này đã làm việc!

Thông tin lai lịch:

Các ký hiệu "<" và ">" được sử dụng để chuyển hướng STDIN và STDOUT, do đó chúng cần phải được thoát để làm cho trình bao không giải thích chúng là chuyển hướng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.