Не существует универсальной переносимой опции кросс-оболочки: History - это интерактивное средство без точной спецификации POSIX о том, как оно реализовано.
Тем не менее, есть некоторые исправления, необходимые для попытки общего подходавыше как функциональных, так и безопасных:
subprocess.Popen(['bash', '-ic', 'set -o history; history -s "$1"', '_', command_string])
- Переменная HISTFILE устанавливается только в интерактивных оболочках.Таким образом, вам нужно запустить bash с
-i
, чтобы он был установлен вообще. set -o history
аналогично необходимо, чтобы включить историю на . - Passing
command_string
out-of-band вместо подстановки его в аргумент, следующий за -c
позволяет избежать массивных ошибок безопасности (когда попытка добавить строку в историю может вместо этого выполнить ее части).