Как добавить команду в историю bash из python - PullRequest
0 голосов
/ 08 февраля 2019

Я пишу скрипт оболочки оболочки ( term-cheat ) на python, который можно использовать для поиска, сбора и выполнения команд оболочки.Я хотел бы добавить выполненные команды в историю оболочки.Я попробовал несколько вещей, таких как следующие, но не удалось.

subprocess.Popen('history -s "%s"'%command_string, shell=True, executable=os.environ['SHELL'])
os.system('fc -S "%s"'%command_string)

1 Ответ

0 голосов
/ 08 февраля 2019

Не существует универсальной переносимой опции кросс-оболочки: 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 позволяет избежать массивных ошибок безопасности (когда попытка добавить строку в историю может вместо этого выполнить ее части).
...