Назад | Перейти на главную страницу

Как добавить успешные команды в файл с помощью оболочки bash?

Возможно, есть более простой способ сделать это, я собираюсь запустить кучу команд в коробке. Я хочу отслеживать успешные, чтобы я мог сделать из них сценарий, чтобы автоматизировать это в будущем.

Я попытался

<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