Trong Bash, làm thế nào tôi có thể có được đường dẫn thư mục từ đối số cuối cùng của lệnh trước đó


0

Tôi thường xuyên phải làm điều này. Ví dụ:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd /etc/pam.d/  # Figure I should just go to the directory

Bây giờ, có cách nào tôi có thể có được thư mục của đối số cuối cùng khi đó là đường dẫn tệp không? Những gì tôi đang hy vọng là một cái gì đó như thế này:

$ vim /etc/pam.d/sudo
$ vim /etc/pam.d/sudo-i
$ cd $dir # <-- something that returns /etc/pam.d in this case

Tôi đang hỏi nguyên nhân này gần đây tôi đã biết về $_biến đã trở nên hữu ích. Đã tự hỏi nếu có một số fu dòng lệnh khác có thể có ích.


Đừng quên bạn cũng đã hoàn thành tab và dấu chấm ESC để gọi lại đối số cuối cùng trên dòng lệnh trước đó.
thuyền viên

Câu trả lời:



2

Lịch sử bash thực sự là một tệp văn bản liệt kê các lệnh đã thực hiện trước đó - nó không bao gồm bất kỳ siêu dữ liệu nào cho biết những lệnh đó đang làm gì và loại tham số nào đang được thông qua.

Vì vậy, $ _ chỉ chứa nội dung sau khoảng trắng cuối cùng.

Tôi nghĩ câu trả lời là không, không có cách nào để làm điều này với bash, có lẽ bạn sẽ cần một vỏ tùy chỉnh.


Tôi đã nghĩ rằng nó có thể là không thể. Nhìn qua mantrang và không thấy bất cứ điều gì có vẻ áp dụng. Hình tôi sẽ hỏi chỉ trong trường hợp.
Belmin Fernandez

2

Thử

 $(dirname $_)

Điều này sẽ cung cấp cho bạn thư mục ở trên bất cứ điều gì là đối số cuối cùng. Trả về .nếu không có thành phần thư mục. Ngoài ra nếu đối số là một cái gì đó như thế /etc/pam.d/, nó sẽ trở lại /etc.

Thêm phần sau vào .profiletệp của bạn sẽ cho phép bạn thực hiện những gì bạn muốn bằng lệnh cdx:

alias cdx='cd $(dirname $_)' 

Thưa quý vị, đây là lý do tại sao chồng trao đổi đá. Là một phát súng trong bóng tối. Cảm ơn vì tiền hỗ trợ!
Belmin Fernandez
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.