Описание тега luks
Я googled вокруг много, по этому и кажется, нет предвестником такой необходимости.
Мне нужно, чтобы изменить предпочтения приложений файл программно : как часть сценария оболочки.
и префов хранятся в строгом формате JSON : это означает, что приложение нагрузки, что предпочтение файла произойдет сбой при запуске, если стоит запятая ,
перед закрывающей фигурной скобкой }
.
обычно это не было бы проблемой.
Я бы просто использовать мои СЭД
с соответственно : если строка содержит мой неисправный строк текста в конце раздела В моем примере файл, то при замене этот текст я буду всегда ставить ее без запятой.
Если другой строки, содержащей другой неисправный бит я хочу заменить не в конце, я всегда заменит его, включая запятую.
Пример :
(Я использую символ подчеркивания _
в моем ГДР разделитель, потому что жал на замену полны обратные слеши иногда)
СЕПГ -я 's_"executableDecorator".*_"executableDecorator": "'$user_path'/фар/выполнить \\"с %S\"",_' $user_path/.faforever/клиента.префов
если строка в конце :
СЕПГ -я 's_"executableDecorator".*_"executableDecorator": "'$user_path'/фар/выполнить \\"с %S\""_' $user_path/.faforever/клиента.префов
это будет работать, но!...
У меня есть приложение, прежде, чем я запустить мой скрипт так, что и не редактируя настройки в то же время, но даже до сих пор, из-за асинхронного выполнения этого приложения в настройках мой скрипт будет получать будет отличаться каждый раз.
все это совершенно случайно.
иногда линия может быть в середине, иногда в конце. Самого приложения (Java и некоторых данных JSON в Java Либ) знает как добавить запятую или нет в зависимости от контекста, но как часть моего скрипта... я чувствую, что дела идут, чтобы получить раздутый.
(Если не и есть стенография, чтобы убедиться, у меня есть запятая или нет в зависимости от того, если следующая строка }
, то это более простое решение, что я буду больше интересуют)
Но я ищу утилиты POSIX, которая фиксирует в формате JSON, так что я могу "санировать" мой JSON в файл prefs, как только я закончу потрошить все это в мой скрипт ...не такая вещь существует?
Редактировать :
вот базовый файл (весь файл ) :
{
"файл MainWindow": {
"ширина": 800,
"высота": 600,
"развернуто": ложные,
"lastView": "новости",
"lastChildViews": {},
"х": 67.0,
"г": 27.0
},
"forgedAlliance": {
"customMapsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованой Союз/карты",
"preferencesFile": "/дом/Т/.вино/диск_с/пользователи/Т/данных приложений/игры/Верховный Главнокомандующий кованые Альянс/игра.префов",
"officialMapsDirectory": "/дом/Т/фар/./Карты",
"modsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованые альянса/Моды",
"порту": 6112,
"autoDownloadMaps": правда,
"executableDecorator": "\"%ы\""
},
"логин": {
"имя": "Тацу",
"пароль": "*******",
"автологина": правда
},
"чат": {
"зум": 1.0,
"learnedAutoComplete": ложные,
"previewImageUrls": правда,
"maxMessages": 500,
"chatColorMode": "таможня",
"channelTabScrollPaneWidth": 250,
"userToColor": {},
"hideFoeMessages": правда,
"timeformat компонента": "авто",
"chatFormat": "компактный",
"idleThreshold": 10
},
"уведомления": {
"soundsEnabled": правда,
"transientNotificationsEnabled": правда,
"mentionSoundEnabled": правда,
"infoSoundEnabled": правда,
"warnSoundEnabled": правда,
"errorSoundEnabled": правда,
"friendOnlineToastEnabled": правда,
"friendOfflineToastEnabled": правда,
"ladder1v1ToastEnabled": правда,
"friendOnlineSoundEnabled": правда,
"friendOfflineSoundEnabled": правда,
"friendJoinsGameSoundEnabled": правда,
"friendPlaysGameSoundEnabled": правда,
"friendPlaysGameToastEnabled": правда,
"privateMessageSoundEnabled": правда,
"privateMessageToastEnabled": правда,
"friendJoinsGameToastEnabled": правда,
"notifyOnAtMentionOnlyEnabled": ложные,
"afterGameReviewEnabled": правда,
"toastPosition": "BOTTOM_RIGHT",
"toastScreen": 0,
"toastDisplayTime": 5000
},
"themeName": "по умолчанию",
"lastGameType": "фаф",
"локализация": {},
"rememberLastTab": правда,
"showPasswordProtectedGames": правда,
"showModdedGames": правда,
"ignoredNotifications": [],
"lastGameMinRating": 800,
"lastGameMaxRating": 1300,
"ladder1v1": {
"фракции": [
"АЕОН",
"кибран",
"Уэф",
"Серафим"
]
},
"новости": {
"lastReadNewsUrl": "http://direct.faforever.com/2019/03/king-of-badlands-tournament-march-30th/"
},
"застройщик": {
"gameRepositoryUrl": "https://github.com/FAForever/fa.git"
},
"vaultPrefs": {
"onlineReplaySortConfig": {
"sortProperty": "оно",
"порядок сортировки": "деск"
},
"mapSortConfig": {
"sortProperty": "статистика.играет",
"порядок сортировки": "деск"
},
"modVaultConfig": {
"sortProperty": "последнюю версию.createtime у",
"порядок сортировки": "деск"
}
},
"gameListSorting": [],
"gameTileSortingOrder": "PLAYER_DES",
"unitDataBaseType": "RACKOVER",
"storedCookies": {},
"lastGameOnlyFriends": ложные
}
единственное что имеет значение-это "forgedAlliance"
:
"forgedAlliance": {
"customMapsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованой Союз/карты",
"preferencesFile": "/дом/Т/.вино/диск_с/пользователи/Т/данных приложений/игры/Верховный Главнокомандующий кованые Альянс/игра.префов",
"officialMapsDirectory": "/дом/Т/фар/./Карты",
"modsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованые альянса/Моды",
"порту": 6112,
"autoDownloadMaps": правда,
"executableDecorator": "\"%ы\""
},
Я запускаю команд, чтобы получить это :
"forgedAlliance": {
"путь": "/дом/Т/.паровая/паровая/steamapps/общие/Верховный Главнокомандующий кованый Альянс",
"путь_установки": "/дом/Т/.паровая/паровая/steamapps/общие/Верховный Главнокомандующий кованый Альянс",
"customMapsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованой Союз/карты",
"preferencesFile": "/дом/Т/.паровая/паровая/steamapps/compatdata/9420/личные/диск_с/пользователи/steamuser/местные Настройки/Использование данных/газ Верховным Главнокомандующим игры/кованые Альянс/игра.префов",
"officialMapsDirectory": "/дом/Т/фар/./Карты",
"modsDirectory": "/домашний/Т/мои игры/Игры/Верховный Главнокомандующий кованые альянса/Моды",
"порту": 6112,
"autoDownloadMaps": правда,
"executableDecorator": "/домашний/Т/фаф/выполнить \"на %S\""
},
команды, которые работают (в стандартном случае, когда ситуация не передвигаться) являются :
если ! команда grep -Q', то"путь"' $user_path/.faforever/клиента.префов > /dev/нуль
тогда
СЕПГ -я 12 и"путь": "'$user_path'/.паровая/паровая/steamapps/общие/Верховный Главнокомандующий кованый Альянс",' $user_path/.faforever/клиента.префов
СЕПГ -я 13i"путь_установки": "'$user_path'/.паровая/паровая/steamapps/общие/Верховный Главнокомандующий кованый Альянс",' $user_path/.faforever/клиента.префов
интернет
! команда grep -Q', то"preferencesFile": "'$user_path'/.паровая/паровая/steamapps/compatdata/9420/личные/диск_с/пользователи/steamuser/местные Настройки/Использование данных/газ Верховным Главнокомандующим игры/кованые Альянс/игра.префов",' $user_path/.faforever/клиента.префов > /dev/нуль && СЭД -я 's_"preferencesFile".*_"preferencesFile": "'$user_path'/.паровая/паровая/steamapps/compatdata/9420/файл/диск\ ° С/Пользователи/steamuser/Параметры/данных приложений/газа Верховный Главнокомандующий игры/кованые Альянс/игра.префов",_' $user_path/.faforever/клиента.префов
! команда grep -Q', то"executableDecorator": "'$user_path'/фар/",' $user_path/.faforever/клиента.префов > /dev/нуль && СЭД -я 's_"executableDecorator".*_"executableDecorator": "'$user_path'/фар/выполнить \\"с %S\""_' $user_path/.faforever/клиента.префов