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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.