如何通过bash改变Python变量的值?
我正在写一个Bash脚本,用来自动化在Linux上安装软件的过程。在某个步骤中,我需要打开一个Python文件,这个文件是安装应用程序的配置文件,然后把里面两个特定变量的值改成新的值。换句话说,假设我有一个.py文件,里面包含(注意:"apple"
和"orange"
的值可能会变化):
# Some code here
a = "apple"
b = "orange"
# Rest of file
而我每次都需要把这些值改成具体的 "banana"
和"pear"
:
# Some code here
a = "banana"
b = "pear"
# Rest of file
我该如何用Bash来自动化这个修改呢?
3 个回答
1
Django也使用Python文件来进行配置,而且有很多方法可以解决这个问题。一个很常见的方法是为不同的环境准备不同的配置文件,然后用一个符号链接指向合适的文件。还有一种可能更好的方法是让你的配置文件从环境中读取值(使用os.environ
,可以设置一个合理的默认值)——这样你只需要在本地设置环境就可以了。
7
可能可以通过在脚本的源代码上使用 sed
来实现,但这样做会很脆弱,而且通常效果不好。
更好的解决办法是让脚本接受需要的值作为命令行参数,这样会更合适。
3
正如unwind所说,如果你能修改这个Python脚本,就让它接受参数。不过,有时候你不能这样做,因为这个脚本是由外部包提供的。这时候,sed的就地搜索和替换可以这样使用:
sed -i 's/a = "apple"/a = "banana"/' filename
在使用bash变量时,你必须用""来包裹sed的内容,否则shell不会展开任何变量。这意味着你需要对字面上的"符号进行转义,这样会让代码看起来不太清晰:
export TESTVAR="banana"
sed -i "s/a = \"apple\"/a = \"$TESTVAR\"/" filename
为了不管原来的内容是什么,都能交换它们:
sed -i 's/a = ".*"/a = "banana"/' filename