如何编辑 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/
表示 boot
或 nvme0
或 sda
.
原来的 grep '^/dev/'
使用正则表达式,这意味着只匹配以 /dev/
开头的行 (^
)。 awk 等价物可以是 /^\/dev\//{print}
,但由于正则表达式必须在 //
中,这意味着您需要转义 /
并且可读性可能比替代方案稍差:
[=28=] ~ "^/dev/" {....}
,其中[=29=]
是整行,~
表示匹配,可以用引号括起来的字符串作为正则表达式。
原来的cut ...
是从第6个字符开始的意思,awk有一个函数substr(string, start, length)
可以做一个子串。如果没有给出长度,则返回整个字符串的其余部分。
允许在 ${exec}
形式中换行,但必须小心使用模板:使用技巧确保 ${template3
永远不会出现在字符串中。这里我用了$\{
.
我遵循了 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/
表示 boot
或 nvme0
或 sda
.
原来的 grep '^/dev/'
使用正则表达式,这意味着只匹配以 /dev/
开头的行 (^
)。 awk 等价物可以是 /^\/dev\//{print}
,但由于正则表达式必须在 //
中,这意味着您需要转义 /
并且可读性可能比替代方案稍差:
[=28=] ~ "^/dev/" {....}
,其中[=29=]
是整行,~
表示匹配,可以用引号括起来的字符串作为正则表达式。
原来的cut ...
是从第6个字符开始的意思,awk有一个函数substr(string, start, length)
可以做一个子串。如果没有给出长度,则返回整个字符串的其余部分。
允许在 ${exec}
形式中换行,但必须小心使用模板:使用技巧确保 ${template3
永远不会出现在字符串中。这里我用了$\{
.