Мені цікаво, чи є спосіб використовувати команду 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