用Python脚本包装Bash Shell中的所有命令
我想要一个机制,让我在Bash终端输入的所有命令都被一个Python脚本包裹起来。这个Python脚本会执行我输入的命令,同时添加一些额外的功能(比如设置“动态”的环境变量)。这样做有可能吗?
我正在使用Ubuntu和Debian Squeezy。
额外说明:
我有一个属性文件,这个文件会动态变化(有些脚本会随时修改它)。我需要把这个文件里的属性作为环境变量在我所有的shell脚本中使用。当然,我可以用shell来解析这个属性文件,但我更喜欢用面向对象的方式来处理(特别是在写的时候),这可以通过Python(和ConfigObject)来实现。
所以我想用这个Python脚本来包裹我所有的脚本(而不需要修改脚本本身),这样就能把这些属性传递给所有的Shell脚本。这是我目前的使用场景,但我可以想象以后会有更多的情况可以扩展我的这个包裹功能。
4 个回答
0
我只知道两样东西可能对你有帮助:
- http://sourceforge.net/projects/pyshint/
- iPython 这个工具可以在解释器里执行一些命令行的指令。
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
你应该了解使用eval
的安全风险。
16
在Bash Shell中,想要在每次输入命令之前都执行一些操作,最好的办法就是修改一个叫做PROMPT_COMMAND
的变量,这个变量通常是在.bashrc文件里。举个例子,如果我想在每个命令之前都先做一些Python的事情,就可以这样设置:
.bashrc:
# ...
PROMPT_COMMAND="python mycoolscript.py; $PROMPT_COMMAND;"
export $PROMPT_COMMAND
# ...
这样一来,在每次输入命令之前,脚本mycoolscript.py
就会被运行。