Làm thế nào để cd vào một thư mục có tên chứa khoảng trắng trong bash?


84

Tôi đã thử cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

cũng thế cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

Câu trả lời:


113

Bạn có thể sử dụng Tabphím sau khi nhấn một vài ký tự đầu tiên (sau đó sẽ "điền" phần còn lại của thư mục cho bạn, ví dụ như cd ~/LTabđiền vào cd ~/Library/sau đó nhập ApTabvà nó sẽ điền vào phần còn lại cho bạn.

Nếu có một khoảng trống giữa các từ và bạn không muốn sử dụng các phương pháp trên, đặt một \(backslash) trước khi không gian, ví dụ cd ~/Library/Application\ Support.


Là trường hợp đường dẫn nhạy cảm hoặc không nhạy cảm? Tôi có thể truy cập Thư viện bằng cd ~ / library, nhưng phương thức tab sẽ không hoạt động nếu tôi gặp trường hợp sai.
colinfang

@colinfang OS X không phân biệt chữ hoa chữ thường, nhưng bảo quản chữ hoa. Shell bash phải phân biệt đối xử hơn một chút khi nói đến tự động hoàn thành.
NRzingh

@NRadyh - Aha, thx.
colinfang

1
@colinfang: Bạn có thể sử dụng shopt -s nocaseglobbind 'set completion-ignore-case on'làm cho bash ít nhạy cảm hơn với vỏ máy.
Chris Johnsen

2
colinfang - Đối với trường hợp hoàn thành tab không nhạy cảm với khả năng tương thích bash, hãy thử 'zsh'. Ngoài ra việc hoàn thành ký tự đại diện của vỏ này là rất tốt.
Ɱark

27

Vấn đề cốt lõi ở đây là cách shell ( bash ) trích dẫn và cách điều đó ảnh hưởng đến việc mở rộng dấu ngã và phân tách thành các từ ngữ (các đối số cho chương trình đang chạy).

bash chỉ xử lý dấu ngã hàng đầu đặc biệt nếu nó không được trích dẫn. Ngoài ra, dấu gạch chéo sau đây cũng không được trích dẫn.

Đồng thời, bash phân tích các dòng lệnh thành các từ ngữ trên cơ sở dữ liệu dựa trên khoảng trắng không trích dẫn. Các cdlệnh thường đòi hỏi chính xác một đối số (thư mục đích). Một dòng lệnh như cd foo barcó nghĩa là chạy cdvới hai đối số: foobar. Nếu bạn chỉ muốn gửi một foo barđối số duy nhất , thì bạn cần trích dẫn khoảng trắng:
(ví dụ) cd foo\ bar(xem thêm ví dụ trích dẫn bên dưới).

Trong tình huống cụ thể của bạn, bạn cần để lại dấu ngã và dấu gạch chéo sau không được trích dẫn trong khi trích dẫn khoảng trắng trong tên thư mục. cd "~/Library/Application Support/"Thử nghiệm của bạn kết thúc trích dẫn quá nhiều (dấu ngã và dấu gạch chéo của nó), trong khi cd ~/Library/Application Support/thử nghiệm của bạn trích dẫn quá ít (nó bỏ qua trích dẫn khoảng trắng trong tên thư mục).

Giải pháp phổ biến nhất là sử dụng lối thoát một ký tự để chỉ trích dẫn khoảng trắng:

    cd ~/Library/Application\ Support

Bạn cũng có thể sử dụng dấu ngoặc đơn hoặc dấu ngoặc kép xung quanh chỉ khoảng trắng hoặc dấu cách và một số bit khác của đối số đó (nhưng không phải là ~/!):

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

Những loại trích dẫn này có ý nghĩa khác nhau, nhưng chúng giống hệt nhau trong các ví dụ này. Dấu ngoặc đơn bảo vệ chuỗi ký tự trong khi dấu ngoặc kép cho phép mở rộng và thay thế khác nhau trong vùng được trích dẫn.

Thông thường, bạn chỉ có thể để vỏ làm công việc cho bạn.

  • Globbing (ký tự đại diện):

    cd ~/L*/Ap*

    Bạn có thể sử dụng shopt -s nocaseglobđể làm cho trường hợp toàn cầu không nhạy cảm:

    cd ~/l*/ap*
  • Hoàn thành:

    Nhấn Tabsau khi nhập cd ~/Lcó thể sẽ mở rộng nó đến cd ~/Library/.
    Nhấn Tablại sau khi nhập Ap(bây giờ bạn có cd ~/Library/Ap) có thể sẽ mở rộng nó sang cd ~/Library/Application\ Support/(vỏ tự động chèn dấu gạch chéo thoát).

    Bạn có thể sử dụng bind 'set completion-ignore-case on'để làm cho trường hợp hoàn thành không nhạy cảm:

    cd ~/l Tabcd ~/Library/; ap Tabcd ~/Library/Application\ Support/


câu trả lời hay @Chris. Làm thế nào bạn có được các ký tự Tab trông giống như các phím?
robzolkos

4
@RobZ: Đó là <kbd></kbd>thẻ HTML (một trong một số thẻ HTML được hỗ trợ trong đánh dấu SE ).
Chris Johnsen

9

Khi bạn trích dẫn hai đường dẫn, bạn đang dừng việc mở rộng dấu ngã. Vì vậy, có một vài cách để làm điều này:

cd ~/"My Code"
cd ~/'My Code'

Dấu ngã không được trích dẫn ở đây, vì vậy mở rộng dấu ngã sẽ vẫn được chạy.

cd "$HOME/My Code"

Bạn có thể mở rộng các biến môi trường bên trong các chuỗi trích dẫn kép; về cơ bản đây là những gì mà bản mở rộng dấu ngã đang làm

cd ~/My\ Code

Bạn cũng có thể thoát các ký tự đặc biệt (chẳng hạn như dấu cách) bằng dấu gạch chéo ngược.


9

Bạn cũng có thể chỉ cần kéo một thư mục vào cửa sổ Terminal, đường dẫn tệp / thư mục hoàn chỉnh sẽ được tự động dán khi kéo.


4

Bạn cần thoát khỏi không gian trong " Application Support"

Thử $ cd ~/Library/Application\ Support/


0

Nếu các cách thông thường không hoạt động, hãy thử thay thế không gian bằng %20.

Điều này làm việc cho tôi khi xử lý SSH và các lệnh kiểu miền khác như auto_smb.


0

Bạn có thể thử cách này đối với các thư mục / tệp cách nhau bằng cách Nếu tên tệp hoặc thư mục chứa 1) tên tệp .extension, lệnh sẽ là cd ~ / file \ name.extension / (hoặc) cd ~ / "tên tệp.extension" /


1
Làm thế nào để câu trả lời này khác nhau hoặc cải thiện bất kỳ câu trả lời khác, tương tự,?
fsb

Cú pháp đầu cuối hoàn hảo để xác định không gian và đưa ra dấu ngoặc kép là một trong những người dùng xác định và cũng sử dụng khóa tab không lấy tên như 1) filename.ext 2) tên tệp.ext Trong khi nhấn tab cho loại tên này tự động hoàn thành các từ được hiển thị tối đa "tập tin" tại thời điểm đó chúng ta có thể sử dụng dấu gạch chéo ngược này để xác định khoảng trắng trong thiết bị đầu cuối. @fsp
prasanth sivanesan

Tất cả thông tin đó phải có trong Câu trả lời để cho người đọc thấy nó khác với 9 Câu trả lời khác, bao gồm cả Câu trả lời được chấp nhận.
fsb
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.