我正在编写一个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自动执行此更改?
答案 0 :(得分:7)
可能在脚本的源代码上使用sed
,但这会非常脆弱,而且通常很糟糕。
正确的解决方案可能是让脚本接受所需的值作为命令行参数,而不是。
答案 1 :(得分:2)
正如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
答案 2 :(得分:1)
Django也使用Python文件作为配置,并且有各种方法来处理这类问题。一个非常常见的方法是为不同的环境提供不同的配置文件集,并使用符号链接到相应的环境。一个可能更好的解决方案是让您的配置文件读取环境中的值(使用os.environ
,可能使用合理的默认值) - 然后您只需在本地设置环境。