如何编辑 conky 模板以动态显示连接的 USB 设备?

How do I edit conky templates to dynamically show attached USB devices?

我遵循了 Casey's Conky Reference with Examples 中的示例 .

我修改后有


[conky config section]
 -- Format the storage information the same way for every device. Parameters: [human name] [path]
template3 = "\1 [${fs_size \2} ${fs_type \2}]${alignr}${fs_used \2} used ${fs_bar 10,60 \2}\n${alignr}${voffset -15}${fs_used_perc \2}%\nMount=${color3}\2$color",

[conky TEXT section]
${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk -t hfsplus --output=source,target | grep  -ve "boot" -ve "nvme0"  -ve "sda"  | grep '^/dev/' | cut --characters=6- | sed 's/^/$\{template3 /;s/$/\}/'}

正在运行。

我想把USB设备的名称分开显示出来,而不是显示挂载点的整个路径。

所以,我尝试了以下几行:

[conky config section]
template3 = "\1 [${fs_size \2} ${fs_type \2}]${alignr}${fs_used \2} used ${fs_bar 10,60 \2}\n${alignr}${voffset -15}${fs_used_perc \2}%\nName=${color3}\$color",

[conky TEXT section]
${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk -t hfsplus --output=source,target | grep  -ve "boot" -ve "nvme0"  -ve "sda"  | grep '^/dev/' | awk -F/ '{printf "%s\t%s\n", [=11=], $NF}' | cut --characters=6- | sed 's/^/$$\{template3 /;s/$/$/\}/'}


我不知道如何让它发挥作用,可能是因为我对 sed 不是很好。

您需要向模板添加第三个参数,并用\3 引用它。所以你把它改成:

template3 = "...Name=${color3}\3$color"

第三个参数在实际使用模板时必须用空格分隔,而不是在添加的 awk 中使用的制表符 \t。您不需要更改 sed,它只是用 ${template3 ... }.

包围输出

无需混合使用 grep、awk 和 sed,您可以更轻松地在 awk 中完成所有操作。尝试:

${execpi 60 df -h -t ext4 -t vfat -t fuse.sshfs -t fuseblk \
  -t hfsplus --output=source,target |
 awk -F/ '/boot|nvme0|sda/{ next }
          [=11=] ~ "^/dev/" { printf "${template3 %s %s}\n",substr([=11=],6),$NF }'}

原文grep -ve "boot"表示匹配行包含“boot”。 awk 等效项是 /boot/{ next },即:如果您在输入行中匹配正则表达式“boot”,则继续处理下一个输入行。正则表达式 /boot|nvme0|sda/ 表示 bootnvme0sda.

原来的 grep '^/dev/' 使用正则表达式,这意味着只匹配以 /dev/ 开头的行 (^)。 awk 等价物可以是 /^\/dev\//{print},但由于正则表达式必须在 // 中,这意味着您需要转义 / 并且可读性可能比替代方案稍差: [=28=] ~ "^/dev/" {....},其中[=29=]是整行,~表示匹配,可以用引号括起来的字符串作为正则表达式。

原来的cut ...是从第6个字符开始的意思,awk有一个函数substr(string, start, length)可以做一个子串。如果没有给出长度,则返回整个字符串的其余部分。

允许在 ${exec} 形式中换行,但必须小心使用模板:使用技巧确保 ${template3 永远不会出现在字符串中。这里我用了$\{.