Làm thế nào để tôi thoát một tên thư mục con có ký hiệu và trong đó?


9

Chạy một kornshell và cố gắng đi qua một cây thư mục. Muốn cd vào một thư mục con có tên như sau:

 -3ab_&_-3dc.img

Câu hỏi của tôi là LÀM THẾ NÀO để tôi thoát khỏi ký hiệu và tên này? Tôi đã thử các kết hợp khác nhau của dấu ngoặc kép và dấu gạch chéo ngược nhưng không thành công.

Câu trả lời:


11

Đối với &(hoặc gần như bất kỳ nhân vật nào khác, bạn có hai khả năng đơn giản.

  • Đặt dấu ngoặc đơn xung quanh toàn bộ: ' -3ab_&_-3dc.img'
  • Đặt dấu gạch chéo ngược trước mỗi ký tự rắc rối: -3ab_\&_-3dc.img

Có hai trường hợp ngoại lệ:

  • Phương pháp trích dẫn duy nhất không hoạt động cho một trích dẫn. Dấu gạch chéo ngược không đặc biệt trong các trích dẫn đơn, vì vậy bạn cũng không thể sử dụng trực tiếp. Những gì bạn có thể làm là kết thúc chuỗi trích dẫn đơn, ngay lập tức sử dụng dấu gạch chéo ngược cộng với trích dẫn đơn và khởi động lại trích dẫn đơn. Vì vậy, ví dụ, nếu tên của thư mục là foo'bar\qux: cd 'foo'\''bar\qux'. Bạn có thể nhớ nó theo cách đó: bên trong các trích dẫn đơn, '\''sẽ giúp bạn có một trích dẫn.
  • Phương thức dấu gạch chéo ngược không hoạt động đối với dòng mới: dấu gạch chéo ngược-dòng mới bị bỏ qua. Bạn cần đặt dấu ngoặc đơn xung quanh một dòng mới.

Bạn cũng có thể sử dụng dấu ngoặc kép, nhưng sau đó bạn cần đặt dấu gạch chéo ngược trước một số ký tự. Trích dẫn đơn là đơn giản hơn.

Có một khó khăn nữa ở đây, đó là tên của thư mục bắt đầu bằng dấu gạch ngang. Nhân vật đó nói với cdlệnh (giống như hầu hết mọi lệnh) mà một tùy chọn tuân theo. Dấu gạch ngang không đặc biệt đối với shell, chỉ với lệnh, vì vậy các trích dẫn sẽ không ảnh hưởng đến nó. Bạn có hai cách để chuyển một đối số bắt đầu bằng dấu gạch ngang sang một lệnh mà không cần nó được hiểu là một tùy chọn:

  • Tìm một cách khác để thể hiện lập luận này. Đối với một tên tệp, thêm ./vào phía trước vẫn chỉ định cùng một tệp.
  • Đặt lý lẽ --trước. Điều đó nói với lệnh ngừng tìm kiếm các tùy chọn.

Vì vậy, đây là một số cách bạn có thể thay đổi thành thư mục con này:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'

Cảm ơn. Nghĩ rằng tôi cũng đã thử định dạng đó, nhưng tôi đã quên thoát khỏi dấu và (như trong ví dụ thứ 3 của bạn). Khi tôi làm, nó đã làm việc.
RCinICT

5

Dấu và không cần phải thoát, nhưng vấn đề bạn đang gặp phải có thể xảy ra với phần đầu -, hơn là phần ký hiệu. Các -cd hàng đầu làm cho rằng bạn đang vượt qua trong các tùy chọn. Bạn có thể giải quyết vấn đề này bằng cách sử dụng ./:

cd './-3ab_&_-3dc.img'

Đây &chắc chắn là một vấn đề. Đối với -, nó phụ thuộc vào vỏ. Zsh khá hài lòng cdvới một thư mục bắt đầu bằng a -. Tuy nhiên bash thì không.
Patrick

Cảm ơn. Nghĩ rằng tôi cũng đã thử định dạng đó, nhưng tôi quên thoát khỏi ký hiệu. Khi tôi làm, nó đã làm việc.
RCinICT
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.