2013-05-02 131 views
1

我想运行一系列由Python脚本生成的bash命令。这些命令的格式为export foo="bar"alias foo=bar。他们必须修改当前流程的环境。在bash中执行生成的命令

这个伟大的工程:

$(./generate_commands.py) 

直到export命令包含空格,如export x="a b"。这会生成一个错误,并且只导出"a(包含引号)。

目前我正在通过输出generate_commands到一个临时文件并找出它来解决这个问题,但是有没有更优雅的解决方案?

+2

你能准确地表明你在做什么吗? – MMM 2013-05-02 15:28:09

+0

我希望我的问题更清楚。 – 2013-05-02 16:57:22

+1

“他们必须修改当前进程的环境。”这是行不通的。如果您当前正在使用'python',那么无论这样做的确切语法或方法如何,运行'bash'以评估您生成的命令将启动一个单独的进程,该进程根据定义不会影响环境变量其父程序。 – twalberg 2013-05-02 17:18:28

回答

4
./generate_commands | bash 

这将管道中的脚本作为输入输出bash

编辑:

为了允许变量在当前shell是可见的,你需要源的输出:

source <(./generate_commands) 

. <(./generate_commands) 
+0

道歉为不使它更清晰第一次:命令主要是'export x = y'形式,并且必须修改当前进程的环境。 – 2013-05-02 17:01:22

+0

@MichaelPlatings然后采购是唯一的方法,其他的只会修改子shell环境,回答编辑 – Alex 2013-05-02 17:07:53

+0

我想这就是答案,谢谢。下一个问题: 'print'export'+ key +'=''+ value +''' IOError:[Errno 32]损坏的管道# – 2013-05-02 17:19:15

0

我觉得OP的问题是

cmd="export x=\"a b\"" 
${cmd} 

不起作用,但

export x="a b" 

作品。我周围这种方式

export x="a" 
echo $x 
x+=" b" 
echo $x 
+0

有趣的想法,但'cmd2 =“x + = \”b \“”''$ {cmd2}'产生一个错误'bash:x + =“:command not found' – 2013-05-02 17:13:04

+0

@MichaelPlatings你把它们放在脚本中吗? – gongzhitaao 2013-05-02 18:07:56

+0

是的,它可以直接输入命令,但是错误发生在运行脚本中的命令。 – 2013-05-09 12:28:27