Мне интересно, если есть способ использовать команду истории, но только список команд, которые были выполнены успешно. Кроме того, будет ли способ перечислить те, которые привели к ошибкам?
Я знаю, что каждая команда имеет статус выхода:
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