gpt4 book ai didi

bash - 为什么 ps 格式选项 '%a' 被截断了?

转载 作者:行者123 更新时间:2023-12-04 05:45:21 24 4
gpt4 key购买 nike

我正在尝试使用 -o 指定的自定义格式读取 ps 的输出。因为我想指定一个自定义分隔符我正在使用 AIX 格式描述符(例如 %p 用于 pid,%a 用于 args 等),但是当使用正常的格式化代码。

当我在此格式字符串的末尾指定 %a 时,一切都按预期工作:

$ echo 'while true; do sleep 1; done' > really-really-really-long-filename 

$ bash really-really-really-long-filename &
[1] 31181

$ ps -p 31181 -o '%p|%a'

PID|COMMAND
31181|bash really-really-really-long-filename

但是如果 %a 不是最后一个字段,我会得到这个:

$ ps -p 31181 -o '%a|%p'

COMMAND | PID
bash really-really-really-l|31181

这似乎与任何屏幕宽度修饰符无关。这里还有别的东西在起作用吗?

(GNU 庆典 4.1.5)

最佳答案

也许这不是最优雅的解决方案,但您可以混合和匹配格式,这样您就可以对选定的字段使用宽度控制。例如

[me@home]$ ps -p 780 -o "%a|%p"
COMMAND | PID
dbus-daemon --system --fork| 780

[me@home]$ ps -p 780 -o args:50 -o "|%p"
COMMAND | PID
dbus-daemon --system --fork --activation=upstart | 780

至于截断发生的原因,我猜测是每个字段都使用硬编码宽度(除非用户指定宽度),但不是最后一个字段。这样程序就不必先缓冲输出以确定打印前的最大列宽。

args 的情况下,默认的硬编码宽度似乎是 27(参见 this implementation of ps)。

我应该指出,这纯粹是我的猜测,不一定是这样。

关于bash - 为什么 ps 格式选项 '%a' 被截断了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com