我在下面安装了一些新的单元文件$HOME/.local/share/systemd/user/
ls -1 $HOME/.local/share/systemd/user/
some.service
some.timer
some_other.service
Run Code Online (Sandbox Code Playgroud)
我运行了以下命令以正确加载它们:systemctl --user daemon-reload
它们出现在 的自动完成中systemctl --user enable <tab> <tab>。我正在寻找的是一种稍后用口香糖编写脚本的方法,以向我显示当前未启用的那些单元的列表。
还有比ls -1 $HOME/.local/share/systemd/user/获取我正在寻找的列表更好的方法吗?
systemctl通过自动完成了解单位,但对于一个看似相当简单的问题,我不想那么深入。我查看了systemctl list 所有可能的(包括禁用的)服务和 Systemd 文档的某些部分,但我还无法找到我正在寻找的内容。它不一定是完美的,自动完成列表还有一些我可以过滤掉的其他条目。这对我来说不会是问题。
一般来说,systemctl --user list-unit-files显示所有用户服务的列表。
因此,您可以运行以下命令来获取禁用的用户服务列表:
systemctl --user --full --no-legend --no-pager list-unit-files --state=disabled
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你可以查看 的bash 补全文件 ,systemctl 看看它是如何获取禁用服务列表的,非常相似:
__systemctl() {
local mode=$1; shift 1
systemctl $mode --full --legend=no --no-pager --plain "$@" 2>/dev/null
}
[...]
__get_disabled_units() { __systemctl $1 list-unit-files "$2*" \
| while read -r a b c ; do [[ $b == "disabled" ]] && echo " $a"; done; }
Run Code Online (Sandbox Code Playgroud)
您还可以在本地计算机上找到该文件。就我而言,它位于/usr/share/bash-completion/completions/systemctl,但我不确定它是否是所有发行版的标准路径。
aviro 的回答激励我花更多的时间在这上面。这就是我现在想出的:
SYSTEMD_COLORS=no systemctl list-unit-files \
--full \
--no-legend \
--no-pager \
--state=disabled \
--type=service,timer \
--user \
| sort \
| awk '!/^(obex|rygel|wireplumber)(@)?\.(service|timer)/ {print $1}'
Run Code Online (Sandbox Code Playgroud)
您不需要SYSTEMD_COLORS=no,systemctl 本身应该检测到其输出已发送到管道,但我将其留在这里供将进一步试验代码的读者使用。
我之所以将其列入,--type=service,timer是因为我的清单中至少有一个.socket单位。
obex|rygel|wireplumber是我不想选择的单位列表。如果要使用允许列表而不是拒绝列表,则需要!在开始时删除。
正如我在问题中所写,我用口香糖进一步处理这个问题,所以我的脚本中紧接着 awk | gum choose。当您查看该项目的网站时,这是有道理的。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |