2014-03-06 67 views
0

有没有办法在复合命令中为每个命令定义环境变量而不重复定义?我可以只为复合命令定义环境变量吗?

X1=foo X2=bar X3=baz command1 && X1=foo X2=bar X3=baz command2 
+0

只有当你在一个子shell中运行它们,W这很笨拙:'A = A B = b C = abc bash -c'echo $ A; echo $ B; echo $ C'' –

回答

1

如果你不希望环境变量太多生存的命令,一种方法是把整个命令在子shell:例如,可以在此而不导出X1,X2和X3缩短

(X1=foo; X2=bar; X3=baz; command1 && command2 ;) 

如果command1或在单独的进程command2来看,你可能需要导出变量,使这些命令看到他们:

(X1=foo; X2=bar; X3=baz; export X1 X2 X3 ; command1 && command2 ;) 
+0

问题不在于'command1'和'command2'是否在subhell中,但是如果它们在单独的*进程中运行*。如果'tmp.bash'包含单个命令'echo $ FOO','(FOO = 3;(。./tmp.bash))'仍然会产生输出; '(FOO = 3;(bash ./tmp.bash))'不;但'(export FOO = 3;(bash ./tmp.bash))'。 – chepner

+0

@chepner谢谢。 – John1024

相关问题