Certaines des réponses ne respectent pas les commentaires. Certaines ne respectent pas les sections. Certaines ne reconnaissent qu'une seule syntaxe (seulement " :" ou seulement "="). Certaines réponses Python échouent sur ma machine à cause d'une capitalisation différente ou de l'absence d'importation du module sys. Toutes sont un peu trop laconiques pour moi.
J'ai donc écrit le mien, et si vous avez un Python moderne, vous pouvez probablement l'appeler depuis votre shell Bash. Il a l'avantage d'adhérer à certaines des conventions de codage courantes de Python, et fournit même des messages d'erreur et de l'aide. Pour l'utiliser, nommez-le quelque chose comme myconfig.py (ne l'appelez PAS configparser.py ou il pourrait essayer de s'importer lui-même), rendez-le exécutable, et appelez-le comme suit
value=$(myconfig.py something.ini sectionname value)
Voici mon code pour Python 3.5 sous Linux :
#!/usr/bin/env python3
# Last Modified: Thu Aug 3 13:58:50 PDT 2017
"""A program that Bash can call to parse an .ini file"""
import sys
import configparser
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="A program that Bash can call to parse an .ini file")
parser.add_argument("inifile", help="name of the .ini file")
parser.add_argument("section", help="name of the section in the .ini file")
parser.add_argument("itemname", help="name of the desired value")
args = parser.parse_args()
config = configparser.ConfigParser()
config.read(args.inifile)
print(config.get(args.section, args.itemname))
6 votes
Est-ce que l'une de ces réponses respecte les sections ?
0 votes
Notez que tout script qui commence par
#!/bin/sh
est un script POSIX sh, et non un script bash. C'est une distinction importante, carsh
ne dispose pas de fonctionnalités comme les tableaux et les cartes (que bash appelle "tableaux associatifs") qui sont très utiles pour construire ce genre de choses.