Ubuntu 20.04の単一ファイルにtoml lensを使用する方法は?

Ubuntu 20.04の単一ファイルにtoml lensを使用する方法は?

pcmanfm.conf現在のディレクトリから単一のファイル()を読み取って変更する必要があります。

頑張った

$ augtool -At "Toml.lns incl $(pwd)/pcmanfm.conf" -I lenses/ print /files
/files

しかし、うまくいきません。toml.aug(上/usr/share/augeas/lenses/dist/toml.aug)は次から始まります。

(*
Module: Toml
  Parses TOML files

Author: Raphael Pinson <[email protected]>
...

だからレンズ名を正確に入力したようです( 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/699Augeasのバグの場合。

解析するファイルの内容は次のとおりです。

[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]このセクションに値を追加/交換したいです。

ベストアンサー1

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変更しようとしていて、その値がというシェル変数にあるとします。compactforward leaningvmode

それtomlqからhttps://kislyuk.github.io/yq/

$ 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
  }
}

おすすめ記事