Je dois changer un .config
fichier texte à chaque fois que le programme ne fonctionne pas comme je le souhaite. Je veux pouvoir le faire en terminal de préférence avec un alias et avec la logique suivante:
alias config='change line 17 to this THEN run this command THEN replace line 17 with what was at beginning'
Ainsi, lorsque j'entre config
dans le terminal, la ligne incriminée sera modifiée, après quoi une commande sera exécutée, après quoi la ligne sera définie pour être ce qu'elle était au début
Voici une solution détaillée comme un script python. Pas littéralement ce que vous demandiez, mais une solution:
#!/usr/bin/python3
import os
# change the lines below to the correct paths
path_to_configfile = "path_to_configfile" # the real one in /etc/dhcp/dhclient.conf
path_toconfigfile_a = "path_toconfigfile_a"
path_toconfigfile_b = "path_toconfigfile_b"
# change the line to the default line in the config file (leave the \n)
old_line = "old_line\n"
# change to the line number to check as an indicator
line_number = 17 # first line = 1
# change to the messages you'd like to see
config1_message = "config 1 is activated"
config2_message = "config 2 is activated"
with open(path_to_configfile) as defaultconfig:
defaultconfig = defaultconfig.readlines()
if defaultconfig[line_number-1] == old_line:
os.system('gksudo cp '+"'"+path_toconfigfile_a+"'"+" "+"'"+path_to_configfile+"'")
os.system('zenity --info --text '+'"'+config1_message+'"')
else:
os.system('gksudo cp '+"'"+path_toconfigfile_b+"'"+" "+"'"+path_to_configfile+"'")
os.system('zenity --info --text '+'"'+config2_message+'"')
Pour l'utiliser:
~/bin
dossier.~/bin
, ou copiez-le dans /usr/bin
pour plus de sécurité.Après déconnexion/connexion, vous pourrez basculer entre les deux versions de paramètres, par la commande
toggle_config
On vous demandera votre mot de passe et vous verrez un message comme celui-ci:
Vous pouvez également créer un fichier .desktop avec la commande et le verrouiller sur le lanceur pour basculer rapidement entre les paramètres.
Cela ressemble beaucoup à un pansement et à un problème XY et vous feriez mieux de comprendre le problème principal. Pourtant, ces commandes feront ce dont vous avez besoin. Je l'ai écrit comme une fonction Shell, pas un alias, mais ajoutez simplement ces lignes à votre ~/.bashrc
fichier:
fix_config(){
## Change current working directory to the directory where .config file is located
cd /path/to/config_file
## The original 17th line
old="$(sed '17q;d' .config)"
## The one you will replace it with
new="new line"
## The sed command that does the replacing
sed -i.bak "17 s/$old/$new/" .config
## Run whatever needs to be run with the modified file
command
## Copy the file back
cp .config.bak .config
## Go back to the old working directory
cd $OLDPWD
}
Vous pouvez ensuite l'exécuter en exécutant fix_config
.