python history文件_从Python脚本中取消设置或删除.bash_history的最新版本

问题

我有一个Python脚本,当我从命令行运行它时,我不想在.bash_history中记录任何内容。

这样做的原因是该脚本使用Python argparse库,该库允许我直接从命令行将参数传递给python代码。

例如,我可以编写脚本,以便它将“ 123456”用作脚本中的值:

$ ./scriptname.py -n 123456

问题是我不希望将值123456存储在.bash_history中。实际上,我希望整个命令永远不会存储在.bash_history文件中。

我尝试过的

子流程和历史记录-c

我已将子进程库添加到脚本的顶部,然后在此之后直接添加了该子进程库,以尝试主动清除正在使用的Shell的当前历史记录:

subprocess.call("history -c", shell=True)

从理论上讲,这应该清除当前shell的历史。我没有看到任何错误,因此我假设它在其他外壳中运行。当我在脚本之外运行它时(直接在运行命令以调用脚本之后),它可以正常工作。

子流程并取消设置HISTFILE

我还使用了以下子过程,但没有成功:

subprocess.call("unset HISTFILE", shell=True)

操作系统和历史记录-c

我还将os库用于Python,并在脚本中包含以下内容:

os.system("history -c")

os.system并取消设置HISTFILE

我也尝试用os.system取消设置HISTFILE无效。

os.system("unset HISTFILE")

首选解决方案特征

我意识到我可以在使用命令后简单地输入未设置的HISTFILE或history -c。但是我希望这尽可能成为一个独立的脚本。

理想情况下,该解决方案可以防止./scomescript.py命令记录在.bash_history中。

我需要此脚本根据输入将文本输出到终端,因此我也无法在之后立即关闭终端。

我想象必须有一种方法可以从python脚本本身中执行此操作-这是我的偏爱。

解决方案

这确实是不太可行的...将条目添加到历史记录文件是由交互式Shell执行的,它是在命令完成且父Shell退出后发生的。它是,严格来说,可能的,如果你让你的Python程序执行产卵哈克后台进程,不喜欢的东西读循环重新写它的历史文件。我真的不能提倡这样的事情,但是您可以在脚本中添加以下内容:

os.system("nohup bash -ic 'while :; do read -d \"\" history < \"$HISTFILE\"; echo \"$history\" | sed -e\"s@^%s.*@@\" -e\"/^$/d\" > \"$HISTFILE\"; sleep 1; done &' >/dev/null 2>&1" % sys.argv[0])

我认为,实现不记录任何参数目标的更好方法是使用类似var = raw_input("")命令,而不是在命令行中传递敏感参数。

您也许还可以创建一个外壳函数来包装脚本,例如my_script(){ set +o history; python_script.py "$@; set -o history ;}?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值