Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple Linux command line command to modify an option in a INI-like config file

I am looking for a generic command line solution that would allow me to add or modify a configuration option inside a config file (INI-like format).

Most Linux configuration files use a INI-like format, with # and ; as comment and with option=value.

Mainly I am looking for something that would take filename, option and value, and that will change the config to match this.

I want to use this to write some auto-deployment scripts. I have no problem on using tools that are not installed by default on Debian or Ubuntu as long they do exist in the default distribution repositories (as I can do an apt-get install xxx, if needed).

Example: change-config /etc/default/nginx ULIMIT '"-n 4096"'

The expected result would be to have ULIMIT="-n 4096" inside the nginx file. Obviously if it does already exists and have the same value, it should do nothing. If it exists, commenting the old line would be fine and adding the new one.

As a note, these config files can have spaces/tabs between parameters so if you have ULIMIT = "..." is still the same command. That's why I was looking for something better than sed as there are plenty of corner cases to evaluate.

Also, I don't want to reinvent the wheel, and I doubt that I am the first one to look for a solution to this kind of problem.

like image 297
sorin Avatar asked Apr 03 '14 10:04

sorin


People also ask

Which command is used to edit configuration files?

Editing Configuration Files through the Command Line:sudo nano /etc/opt/orchid_server.

How do I edit a config file in Terminal?

To edit any config file, simply open the Terminal window by pressing the Ctrl+Alt+T key combinations. Navigate to the directory where the file is placed. Then type nano followed by the filename that you want to edit. Replace /path/to/filename with the actual file path of the configuration file that you want to edit.


1 Answers

git config is actually a semi-generic INI interface.

❱ git config --file=/etc/default/nginx somegroup.ULIMIT '-n 4096'
❱ cat /etc/default/nginx
[somegroup]
    ULIMIT = -n 4096
❱ git config --file=/etc/default/nginx somegroup.ULIMIT
"-n 4096"

It doesn't support adding top-level keys, though. All keys have to be placed in an INI style group, hence the "somegroup." above. That makes it unsuitable for your task, but I thought I'd mention it here for others finding their way here.

like image 194
Parker Coates Avatar answered Oct 29 '22 15:10

Parker Coates