Сохранить историю командной строки, только если код выхода равен 0

Я нашел решение этой проблемы. Как вы упомянули steeldriver, это синтаксически правильно, но я внес изменения в оператор в предложении.

#/bin/bash

description="Advert"

if [[ $description =~ "Design" ]] || [[ $description =~ "Digital" ]]; then

    echo 'Matches Design or Digital'
else
    echo 'Does not match'
fi

Всем спасибо за советы!

-1
13.02.2020, 01:15
1 ответ

Сохраните это в своем ~/.bashrcфайле

good_history(){ 
  exit_status=$?
  if ((!exit_status)); then 
     history 1 >> history.txt
  fi
}

export PROMPT_COMMAND="good_history"

После этого источника ~/.bashrcзапуститеsource ~/.bashrc

  • Приведенная выше конструкция является определением функции,function_name() { command_goes_here; }

  • В файл сохраняются только те команды, которые завершились с помощью 0.history.txt

  • Что касается оболочки, статус выхода 0является успешным, а остальные — неудачными.

  • Встроенная переменная $?содержит последний статус выхода последней выполненной команды, интерактивной или нет.

  • В математическом контексте использование bash 0является ошибкой, а 1— успехом при использовании (( )), поэтому мы отрицаем использование символа bang !, см.help test

  • >>добавляется туда, куда указывает этот объект, в данном случае к файлу.

  • См. раздел руководства bash о переменной PROMPT_COMMANDпопробуйте запустить ее в сеансе оболочкиPAGER='less +/^[[:space:]]*PROMPT_COMMAND' man bash

  • Вам может понадобиться или не понадобиться файл export, но я не уверен, какие настройки у вас есть в ваших файлах shellrc, поэтому он там есть.

  • Подождите, пока кто-нибудь используетzsh
1
28.04.2021, 23:23

Теги

Похожие вопросы