Мені цікаво, чи є спосіб використовувати команду history, але лише список команд, які були успішно виконані. Так само, чи існував би спосіб перерахувати ті, що призвели до помилок?
Я знаю, що кожна команда має статус виходу:
0- Успішне виконання команди
1- Команда виходить з ладу через помилку під час розширення або перенаправлення, статус виходу більше нуля.
2- Неправильне використання команди
12- Команда знайдена, але не виконується
127- Команда не знайдена
і можна перевірити, переходячи до команди з echo $?
: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Приклад:
Після виконання цих 4 команд:
ls
help
lss
ls nonexistentfile
Я спробував тестувати, щоб надрукувати лише успішні команди (статус виходу 0), які мають бути лише "ls" та "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
Цей результат:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Це дещо працює, але є дві проблеми:
- Чомусь
grep -v 'bash'не виключають рядки, що містять 'bash', але якщо я це зробитиgrep 'bash', він буде включати лише рядки з 'bash', я не впевнений, чому один працює, а не інший. - Це розділення кожного рядка / команди рядком. Остання
lsкоманда повинна бути
ls nonexistentfile, але вона працюєlsіnonexistentfileяк окремі команди.
Будь-яка ідея щодо того, що я повинен налаштувати в команді, або як робити це?
ls #$CODE, ll #$CODEдля виходу історії. Я не впевнений , якщо він працює для вас, але я повинен був змінитиsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'доsed -i '\$s/\$/ \#$CODE/' $HISTFILE. Я взяв `` перед $ CODE