在脚本内调用“ history -c”不起作用?

时间:2019-04-28 15:48:55

标签: windows bash git-bash mingw-w64

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

#!/bin/bash

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

可以很好地清除~/.bash_history文件,但是如果我在运行此脚本后运行history,则我的所有历史记录仍然存在(直到退出终端)。我在这里想念什么吗?

1 个答案:

答案 0 :(得分:2)

不要试图清除历史记录-尽管这是在命令行中传递密码的最明显的方式,但该动作给人一种错误的安全感:即使完全不涉及历史记录,命令行也很容易通过同一台计算机上运行的其他进程捕获(即使使用不受信任的帐户!)。

此外,请注意,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.