[英]Is there a GNU/Linux command to write ini files?
我目前正在編寫一些文檔(特別是有關如何使用本地Vagrant機器設置Ansible的文檔),並且我喜歡以發出命令的形式列出注釋。 例如:
設置SSH代理:
ssh-agent bash ssh-add .vagrant/machines/default/virtualbox/private_key
但是,有時我發現我想在配置文件中記錄更改,這並不是那么容易描述。 我目前正在這樣做:
配置Ansible以將端口2222用於Vagrant
Modify /etc/ansible/ansible.cfg to use remote_port = 2222
我寧願做這樣的事情(一個理論上的命令),因為它比起使用文本編輯器可以更快,更自動化地發布:
配置Ansible以將端口2222用於Vagrant
ansible-config remote_port 2222
這似乎是一個ini文件,因此,如果ansible
二進制文件不支持此文件(並且我看不到它支持),是否有通用的Linux / Unix方法來執行此操作? 失敗,如何:
iniwrite /etc/ansible/ansible.cfg defaults.remote_port 2222
當然,我可以編寫某種腳本,但是最好不要重新發明輪子!
我正在使用Ubuntu 14.04 LTS。
這正是Ansible應該解決的問題之一-因此您可以使用它編寫自己的配置文件。 只需創建一個引導劇本,即可在localhost上執行所有必要的操作(當然,除了安裝Ansible外)。
這些工具的前身是Augeas 。 它帶有一個默認的IniFile“ lens” ,您可以使用它輕松地編寫各種ini條目。
我不知道這樣的工具,它絕對不是您可以期望安裝在用戶系統上的默認工具鏈的一部分。
您可以使用sed
:
sed -i 's/^remote_port=.*/remote_port=2222/' ansible.cfg
所有GNU / Linux用戶都將理解這一點,特別是因為您描述了它在做什么。
ansible-config
腳本可以很簡單:
#!/bin/sh
CFG=/etc/ansible/ansible.cfg
awk '{BEGIN {found=0} END {if(!found){print keyword" = "value}} if($0~"^ *"keyword" *="){print keyword" = "value; found=1}else{print $0}}' \
keyword="$1" value="$2" $CFG > $CFG.new \
&& mv $CFG.new $CFG \
|| rm -f $CFG.new
可能需要進行一些錯誤檢查,等等。。。
盡管我的問題的重點是“通常如何自動編寫ini文件”,但我發現了Ansible如何避免這種情況。 可以將SSH端口添加到/etc/ansible/hosts
文件中,從而:
127.0.0.1:2222
這將覆蓋remote_port
在/etc/ansible/ansible.cfg
配置ini文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.