2017-08-11 65 views
0

我对编码感到陌生,在stackoverflow上已经发现了一些关于此的主题,但无法使其工作,因为它们似乎对我过分。我可能需要一些指导。替换外部bash脚本中的特定变量

我需要在外部bash脚本'comlink.conf'中更改一些变量。但只有特定的。其他人应该像他们一样离开。

ready=0 
test=1 
new=2 

echo 'ready='$ready > comlink.conf 
sleep 10 

ready=1 

echo 'ready='$ready > comlink.conf 

如果我那样做,“测试= 1”和“新= 2”将被完全覆盖,并从文件都不见了。这不应该发生。

什么是最简单的方法来做到这一点?

+0

当您使用> in echo时,它将覆盖comlink.conf中的内容。如果你想添加数据,你可以使用>>。 – betaros

+0

好主意!但是'ready'是0,在下一行它是1.我需要更新特定变量,而不是再次使用不同的值再次添加,因为另一个脚本将读取并使用该文件中的变量。 –

+0

你应该看看像sed这样的工具 –

回答

1

可以使用sed用不同的替代,如:

sed 's/ready=.*/ready=1/' comlink.conf > tmp 
mv tmp comlink.conf 

,或者如果您正在使用GNU sed的:

sed -i 's/ready=.*/ready=1/' comlink.conf 

或BSD sed:

sed -i'' 's/ready=.*/ready=1/' comlink.conf 
+0

完美的工作。谢谢!!!但是为什么它只使用临时文件?是不是可以直接编辑外部文件? –

+0

@daniel_e带'-i'支持的'sed'版本会在原地进行修改。如果你尝试使用重定向,你最终会在阅读文件之前截断文件,所以你需要一个临时文件(或者像它一样工作) –

+0

完美。感谢您的信息,Eric。现在我学到了些东西。 :-) –

1

如果我理解你是对的,你想替换文件中的一行。你不应该使用echo

相反,我会建议使用的sed:

sed '/.*ready*/s/.*/ready=1/' comlink.conf