Como adicionar uma nova entrada de perfil ao profiles.ini do Firefox usando um script?

0

O Firefox usa um arquivo de texto chamado ~/.mozilla/firefox/profiles.ini para conter uma lista de perfis. As entradas são semelhantes a esta:

[Profile0]
Name=default
IsRelative=1
Path=default
Default=1

...

[Profile8]
Name=guest
IsRelative=1
Path=guest

Eu preciso adicionar uma nova entrada para profiles.ini usando um script bash. O problema é que os perfis precisam ser numerados sequencialmente e não sei de antemão quantos perfis cada usuário possui. No exemplo acima, eu precisaria adicionar [Profile9]. Se, em vez disso, eu adicionar [Perfil8] ou [Perfil10] ou qualquer outro número, ele não funcionará corretamente.

Como meu script pode descobrir qual é o maior número de perfil atualmente em uso, incrementá-lo e acrescentar um novo perfil a profiles.ini ?

Cheguei até algo assim usado em um for-loop , mas não sei como obter $NewNumber .

echo "[Profile$NewNumber]
Name=NewProfile
IsRelative=1
Path=NewPath" >> /home/$myuser/.mozilla/firefox/profiles.ini
    
por MountainX 27.10.2018 / 22:39

2 respostas

1

Talvez use o awk para extrair as linhas "[Perfil]" e então processe os bits "[Perfil ...]", depois classifique os resultados numericamente, mantendo apenas o último (mais alto) um:

highest=$(awk '/^\[Profile[0-9]+\]$/ { s=substr($0, 9); sub("]","", s); print s}' < /home/$myuser/.mozilla/firefox/profiles.ini |sort -n | tail -1)
highest=$((highest + 1))
printf "[Profile%d]
Name=NewProfile
IsRelative=1
Path=NewPath" "$highest" >> /home/$myuser/.mozilla/firefox/profiles.ini
    
por 28.10.2018 / 00:10
1

Por que não toda a abordagem awk ?

awk '
/Profile[0-9]+/ {PRNR = $0
                 gsub (/[^0-9]/, "", PRNR)
                }
1
END             {print ""
                 print "[Profile" ++PRNR "]"
                 print "Name=NewProfile"
                 print "IsRelative=1"
                 print "Path=NewPath >> /home/$myuser/.mozilla/firefox/profiles.ini"
                }
' profiles.ini
    
por 28.10.2018 / 15:29