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