用Python脚本包装Bash Shell中的所有命令

12 投票
4 回答
4318 浏览
提问于 2025-04-16 08:24

我想要一个机制,让我在Bash终端输入的所有命令都被一个Python脚本包裹起来。这个Python脚本会执行我输入的命令,同时添加一些额外的功能(比如设置“动态”的环境变量)。这样做有可能吗?

我正在使用Ubuntu和Debian Squeezy。

额外说明:

我有一个属性文件,这个文件会动态变化(有些脚本会随时修改它)。我需要把这个文件里的属性作为环境变量在我所有的shell脚本中使用。当然,我可以用shell来解析这个属性文件,但我更喜欢用面向对象的方式来处理(特别是在写的时候),这可以通过Python(和ConfigObject)来实现。

所以我想用这个Python脚本来包裹我所有的脚本(而不需要修改脚本本身),这样就能把这些属性传递给所有的Shell脚本。这是我目前的使用场景,但我可以想象以后会有更多的情况可以扩展我的这个包裹功能。

4 个回答

0

我只知道两样东西可能对你有帮助:

  1. http://sourceforge.net/projects/pyshint/
  2. 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就会被运行。

撰写回答