Làm cách nào tôi có thể rút ngắn đường dẫn hiện tại của bash prompt thành một chữ cái trên mỗi thư mục?


9

Tôi không thể nhớ nơi nào, nhưng tôi đã thấy đường dẫn hiện tại của bash prompt được rút ngắn theo một cách thú vị: mọi thư mục chứa trong đường dẫn (ngoại trừ thư cuối cùng) chỉ được thay thế bằng chữ cái đầu tiên. Ví dụ: path/to/some/directorysẽ được rút ngắn thành p/t/s/directory.

Làm thế nào tôi có thể tái tạo hành vi đó?


Bạn không thể trực tiếp làm điều này trong PS1. Bạn sẽ cần phải đặt PS1để chứa một biến ( PS1='${SHORT_PWD}\\$') và cập nhật biến đó trong $PROMPT_COMMAND.
Gilles 'SO- ngừng trở thành ác quỷ'

@Gilles 'SO- ngừng trở nên xấu xa' chắc chắn bạn có thể làm điều đó trực tiếp, nếu bạn sử dụng trích dẫn kép, bạn cần phải gạch chéo các \$()thay thế lệnh
bac0n

Câu trả lời:


8

Sau khi chơi với nó một lúc tôi nhận được câu trả lời bạn yêu cầu:

Thêm phần này vào tệp .bashrc trong thư mục chính của bạn, thoát khỏi thiết bị đầu cuối và thuê lại nó và bạn sẽ nhận được lời nhắc.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

Nó sử dụng hàm khai báo sps()để đánh giá đường dẫn mỗi khi biến PS1đó là dấu nhắc, được hiển thị

I E

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

Hoặc ... nếu bạn nhấn mạnh vào một chữ cái

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

Hiển thị:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Cảm ơn tôi Lời nhắc của tôi là thực sự loại bỏ user@pcmột phần. Làm thế nào tôi có thể xử lý này?
Alex

3

Để cắt bớt tất cả các tên thư mục ngoại trừ tên cuối cùng:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

Điều này không hoạt động khi tôi thay đổi các thư mục?
Aditya Varma

1

rút ngắn tất cả các tên trừ tên cuối cùng không có python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
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.