TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Các cơ sở tương tác lịch sử của Bash không cung cấp bất kỳ cơ chế nào để kiểm tra đầu ra của các lệnh. Shell không lưu trữ điều đó và mở rộng lịch sử đặc biệt dành cho các lệnh bạn tự chạy hoặc một phần của các lệnh đó.
Điều này khiến cho cách tiếp cận chạy lại lệnh cuối cùng và chuyển cả stdout và stderr ( |&) thành một lệnh thay thế. Câu trả lời của heemayl đạt được điều này, nhưng không thể được sử dụng trong một bí danh vì shell thực hiện mở rộng lịch sử trước khi mở rộng bí danh, chứ không phải sau đó.
Tôi cũng không thể mở rộng lịch sử để hoạt động trong hàm shell, thậm chí bằng cách cho phép nó trong hàm với set -H. Tôi nghi ngờ !!trong một chức năng sẽ không bao giờ được mở rộng và tôi không chắc nó sẽ được mở rộng thành gì, nhưng hiện tại tôi không chắc chắn chính xác tại sao nó không hoạt động.
Do đó, nếu bạn muốn thiết lập mọi thứ để bạn có thể thực hiện việc này với rất ít thao tác gõ, bạn nên sử dụng fcshell dựng sẵn thay vì mở rộng lịch sử để trích xuất lệnh cuối cùng từ lịch sử. Điều này có lợi thế bổ sung mà nó hoạt động ngay cả khi mở rộng lịch sử bị vô hiệu hóa.
Như được hiển thị trong câu trả lời của Gordon Davisson về Tạo bí danh có chứa mở rộng lịch sử bash (trên Super User ), mô phỏng . Cắm vào này cho trong lệnh heemayl của sản lượng:$(fc -ln -1)!!!! $(!! |& tail -1)
$($(fc -ln -1) |& tail -1)
Điều này hoạt động như thế $(!! |& tail -1)nhưng có thể đi trong một định nghĩa bí danh:
alias @@='$($(fc -ln -1) |& tail -1)'
Sau khi bạn chạy định nghĩa đó, hoặc đặt nó vào .bash_aliaseshoặc .bashrcbắt đầu một shell mới, bạn có thể chỉ cần gõ @@(hoặc bất cứ thứ gì bạn đặt tên bí danh) để cố gắng thực hiện dòng đầu ra cuối cùng từ lệnh cuối cùng.
ek@Io:~$ alias @@='$($(fc -ln -1) |& tail -1)'
ek@Io:~$ evolution
The program 'evolution' is currently not installed. You can install it by typing:
sudo apt-get install evolution
ek@Io:~$ @@
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
evolution-common evolution-data-server evolution-data-server-online-accounts
....