Bash
如何在 Ubuntu 20.04 上的單個文件上使用 toml 鏡頭?
我需要讀取和修改
pcmanfm.conf
目前目錄中的單個文件 ( )。我試過了
$ augtool -At "Toml.lns incl $(pwd)/pcmanfm.conf" -I lenses/ print /files /files
但它不起作用。
toml.aug
(on/usr/share/augeas/lenses/dist/toml.aug
) 以(* Module: Toml Parses TOML files Author: Raphael Pinson <raphael.pinson@camptocamp.com> ...
所以我相信我正確地輸入了鏡頭的名稱(
Toml.lns
)。如果我解析不同類型的文件,相同的設置效果很好,例如
$ augtool -At "Shellvars.lns incl /tmp/vars.sh" -I lenses/ print /files /files /files/tmp /files/tmp/vars.sh /files/tmp/vars.sh/TESTINT = "2" /files/tmp/vars.sh/TESTSTR = "\"FF\""
我已經在https://github.com/hercules-team/augeas/issues/699上發布了同樣的問題,以防它是 Augeas 中的一個錯誤。
我嘗試解析的文件具有以下內容:
[config] bm_open_method=0 [volume] mount_on_startup=1 mount_removable=1 autorun=1 [ui] always_show_tabs=0 max_tab_chars=32 win_width=1916 win_height=1149 splitter_pos=150 media_in_new_tab=0 desktop_folder_new_win=0 change_tab_on_drop=1 close_on_unmount=1 focus_previous=0 side_pane_mode=places view_mode=compact show_hidden=0 sort=name;ascending; toolbar=newtab;navigation;home; show_statusbar=1 pathbar_mode_buttons=0
我想在該
[ui]
部分中添加/替換一個值。
TOML 規範指定必須引用字元串(請參閱https://toml.io/en/v1.0.0#string)。您的文件的更正變體看起來像
[config] bm_open_method=0 [volume] mount_on_startup=1 mount_removable=1 autorun=1 [ui] always_show_tabs=0 max_tab_chars=32 win_width=1916 win_height=1149 splitter_pos=150 media_in_new_tab=0 desktop_folder_new_win=0 change_tab_on_drop=1 close_on_unmount=1 focus_previous=0 side_pane_mode="places" view_mode="compact" show_hidden=0 sort="name;ascending;" toolbar="newtab;navigation;home;" show_statusbar=1 pathbar_mode_buttons=0
然後,您想要替換該
ui
部分中的值。假設您想view_mode
從compact
to更改,forward leaning
並且您在一個名為 的 shell 變數中有這個值vmode
。然後,使用https://kislyuk.github.io/yq/
tomlq
中的工具,$ vmode='forward leaning' $ tomlq -t --arg vmode "$vmode" '.ui.view_mode |= $vmode' pcmanfm.conf [config] bm_open_method = 0 [volume] mount_on_startup = 1 mount_removable = 1 autorun = 1 [ui] always_show_tabs = 0 max_tab_chars = 32 win_width = 1916 win_height = 1149 splitter_pos = 150 media_in_new_tab = 0 desktop_folder_new_win = 0 change_tab_on_drop = 1 close_on_unmount = 1 focus_previous = 0 side_pane_mode = "places" view_mode = "forward leaning" show_hidden = 0 sort = "name;ascending;" toolbar = "newtab;navigation;home;" show_statusbar = 1 pathbar_mode_buttons = 0
該
tomlq
工具使用jq
語法來訪問和修改文件。.ui.view_mode
路徑是我們決定要更改的路徑,$vmode
也是我們將其更新到的值。這是一個內部變數,我們在命令行使用--arg
.作為參考,該
tomlq
實用程序在內部使用從您的 TOML 文件創建的 JSON 文件,看起來像{ "config": { "bm_open_method": 0 }, "volume": { "mount_on_startup": 1, "mount_removable": 1, "autorun": 1 }, "ui": { "always_show_tabs": 0, "max_tab_chars": 32, "win_width": 1916, "win_height": 1149, "splitter_pos": 150, "media_in_new_tab": 0, "desktop_folder_new_win": 0, "change_tab_on_drop": 1, "close_on_unmount": 1, "focus_previous": 0, "side_pane_mode": "places", "view_mode": "compact", "show_hidden": 0, "sort": "name;ascending;", "toolbar": "newtab;navigation;home;", "show_statusbar": 1, "pathbar_mode_buttons": 0 } }