2017-08-11 51 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