Возможно, есть более простой способ сделать это, я собираюсь запустить кучу команд в коробке. Я хочу отслеживать успешные, чтобы я мог сделать из них сценарий, чтобы автоматизировать это в будущем.
Я попытался
<command> && echo "!!" >> file
но !!
печатает строку перед этой. Я пробовал еще несколько вещей, но не могу заставить что-то работать
Сделать это можно так:
PROMPT_COMMAND='[[ $? == 0 ]] && history 1 | sed -r "s/\ +[0-9]+\ +//" >> successful'
$ PROMPT_COMMAND содержит команду, которую bash выполняет перед выдачей приглашения. Это оценивает статус выхода вашего предыдущий команда (после вы нажимаете Enter, чтобы выполнить текущую команду, но перед bash оценивает его), и если он был успешным, извлеките его из своей истории bash, удалите номер команды и добавьте его в отдельный файл.
Теперь вам не нужно ничего добавлять к своим командам:
echo "exits successfully and will be appended"
ehco "only ends up in bash history"
Обратите внимание, что команды чтения истории, !! и остальные члены его семейства работают только в интерактивных оболочках, вы не можете использовать их в скриптах.
Также обратите внимание, что опция -r - это gnu sed, у bsd sed ее нет.
Я бы использовал вторую оболочку и ремень. В оболочке 1 используйте echo $$
чтобы найти PID вашей оболочки. Затем используйте strace -f -q -eexecve,exit_group -p that_pid_here
отслеживать команды и статусы выхода. Полученный результат впоследствии может быть преобразован в сценарий оболочки.
Это будет делать - обратите внимание, это "вместо"
<command> && echo '!!' >> file