簡體   English   中英

是否有GNU / Linux命令來編寫ini文件?

[英]Is there a GNU/Linux command to write ini files?

我目前正在編寫一些文檔(特別是有關如何使用本地Vagrant機器設置Ansible的文檔),並且我喜歡以發出命令的形式列出注釋。 例如:

  1. 設置SSH代理:

     ssh-agent bash ssh-add .vagrant/machines/default/virtualbox/private_key 

但是,有時我發現我想在配置文件中記錄更改,這並不是那么容易描述。 我目前正在這樣做:

  1. 配置Ansible以將端口2222用於Vagrant

     Modify /etc/ansible/ansible.cfg to use remote_port = 2222 

我寧願做這樣的事情(一個理論上的命令),因為它比起使用文本編輯器可以更快,更自動化地發布:

  1. 配置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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM