Tôi tự hỏi nếu có một cách để sử dụng lệnh lịch sử nhưng chỉ liệt kê các lệnh đã được chạy thành công. Tương tự như vậy, liệu có cách nào để liệt kê những lỗi tạo ra lỗi không?
Tôi biết mỗi lệnh có trạng thái thoát là:
0
- Thực hiện thành công lệnh
1
- Lệnh thất bại do lỗi trong quá trình mở rộng hoặc chuyển hướng, trạng thái thoát lớn hơn 0.
2
- Sử dụng lệnh không chính xác
12
- Tìm thấy lệnh nhưng không thể thực thi
127
- Không tìm thấy lệnh
và có thể được kiểm tra tiến hành lệnh với echo $?
từ: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Thí dụ:
Sau khi chạy 4 lệnh này:
ls
help
lss
ls nonexistentfile
Tôi đã thử kiểm tra để chỉ in các lệnh thành công (trạng thái thoát là 0), chỉ nên 'ls' và 'help':
for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out
Kết quả này:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Điều này hơi hoạt động, nhưng có hai vấn đề:
- Vì một số lý do,
grep -v 'bash'
không loại trừ các dòng có chứa 'bash', nhưng nếu tôi làm vậygrep 'bash'
, nó sẽ chỉ bao gồm các dòng có 'bash', tôi không chắc tại sao một dòng hoạt động mà không phải là dòng khác. - Đó là phân tách từng dòng / lệnh bằng chuỗi. Lệnh cuối cùng
ls
sẽ là
ls nonexistentfile
, nhưng nó đang chạyls
vànonexistentfile
là các lệnh riêng biệt.
Bất kỳ ý tưởng về những gì tôi nên điều chỉnh trong lệnh, hoặc làm thế nào để làm điều này?
ls #$CODE, ll #$CODE
kết quả lịch sử. Tôi không chắc nó có hiệu quả với bạn không, nhưng tôi phải đổised -i '\$s/\$/ \#\$CODE/' $HISTFILE'
sangsed -i '\$s/\$/ \#$CODE/' $HISTFILE
. Tôi đã lấy `` ra trước $ CODE