使用Python脚本包装在Bash-Shell中输入的所有命令

时间:2010-12-11 19:00:20

标签: python linux bash

我想要的是一种机制,我在Bash-Terminal上输入的所有命令都由Python脚本包装。 Python脚本执行输入的命令,但它增加了一些额外的魔法(例如设置“动态”环境变量)。 这有可能吗?

我正在运行Ubuntu和Debian Squeezy。

补充说明:

我有一个动态更改的属性文件(某些脚本会随时更改它)。我需要该文件中的属性作为所有shell脚本中的环境变量。当然我可以从shell以某种方式解析属性文件,但我更喜欢使用面向对象的样式(尤其是写入),因为它可以用Python(和ConfigObject)完成。

因此,我想用Python脚本包装所有脚本(无需自己修改脚本),这些脚本处理这些属性到所有Shell脚本。 这是我目前的用例,但我可以想象,我会发现其他情况,我可以在以后扩展我的包装。

4 个答案:

答案 0 :(得分:13)

将每个键入Bash Shell的命令包装的完美方法是更改​​.bashrc中的变量PROMPT_COMMAND。例如,如果我想在每个命令之前做一些Python的东西,喜欢在我的问题中询问:

.bashrc中:

# ...
PROMPT_COMMAND="python mycoolscript.py; $PROMPT_COMMAND;"
export $PROMPT_COMMAND
# ...

现在在每个命令运行脚本mycoolscript.py之前。

答案 1 :(得分:1)

使用Bash的DEBUG陷阱。如果您需要我详细说明,请告诉我。

修改

以下是您可以做的各种事情的简单示例:

$ cat prefix.py
#!/usr/bin/env python
print "export prop1=foobar"
print "export prop2=bazinga"
$ cat propscript
#!/bin/bash
echo $prop1
echo $prop2
$ trap 'eval "$(prefix.py)"' DEBUG
$ ./propscript
foobar
bazinga

您应该了解security risks of using eval

答案 2 :(得分:0)

我不知道有什么可以帮助你关注的事情

  1. http://sourceforge.net/projects/pyshint/
  2. iPython shell具有一些在iterpreter中执行shell命令的功能。

答案 3 :(得分:-2)

没有直接的方法可以做到。 但你可以制作一个python脚本来模拟一个bash终端,你可以使用python中漂亮的“Subprocess”模块以你喜欢的方式执行commnands