"history -c" 在脚本内部调用时不起作用?

"history -c" doesn't work when called inside a script?

我写了一个 bash 脚本来调用一个 Python 脚本,该脚本使用 AES 加密私有数据,将文件路径和 256 位密码作为唯一参数。加密完成后,它会清除历史记录,这样密码就不会存在,以防我让终端保持打开状态。它看起来像这样:

#!/bin/bash

python aesencrypt.py "" ""
history -c
echo "" > ~/.bash_history

~/.bash_history 文件被清除得很好,但是如果我 运行 history 在 运行 执行此脚本之后,那么我的所有历史记录仍然存在(直到我退出终端)。我在这里遗漏了什么吗?

不要试图清除历史记录——尽管这是在命令行上传递密码最显而易见的方式,但该操作给人一种错误的感觉安全性:命令行上给出的密码很容易通过同一台机器上的其他进程 运行 捕获(即使在不受信任的帐户下!)即使根本不涉及历史。

此外,正如您所注意到的,shell 只能修改 它自己的 内存状态,而不是启动它的单独进程的内存状态(甚至可能不相同 shell,或者根本不是 shell!)。


相反,修改您的 Python 程序的调用约定以直接从 TTY(如 SSH 所做的那样)或从环境中读取密码。对于后者,用法可能如下所示:

# assumes you renamed aesencrypt.py to aesencrypt, ran chmod +x, and gave a valid shebang
password="somePassword" aesencrypt outFile

...并且您可能希望修改您的 Python 脚本以执行如下操作:

#!/usr/bin/env python
import os, sys

filename = sys.argv[1]
password = os.environ['password']

# ...put the rest of your logic here.