fish - 大括号扩展作为标志参数对
问题描述
我正在尝试top
结合使用pgrep
来过滤正在显示的进程。到目前为止我的工作是:
top -pid (pgrep dart)
top
这对于在的交互式视图中显示单个进程非常有用。
但是,macos 版本top
只有一种列出多个进程的方式,您必须一遍-pid [process id]
又一遍地重复,例如:
top -pid 354 -pid 236 -pid 287
我的第一个想法是我可以使用大括号扩展和命令替换来实现这一点,我尝试了:
top "-pid "{(pgrep dart)}
但我明白了invalid option or syntax: -pid {33978}
。即使我手动添加 pids 它也不起作用:
top "-pid "{45, 23}
invalid option or syntax: -pid 45
是否有可能实现我想要用鱼做的事情?即通过命令替换和大括号扩展的组合将标志插入命令?
解决方案
我想我们可以想出一些更简洁的东西,但至少:
top (string split " " (printf " -p %s" (pgrep dart)))
fish
作为第一次尝试,似乎在 Ubuntu/WSL 上对我有用。这应该转化为:
top (string split " " (printf " -pid %s" (pgrep dart)))
在 MacOS 上,但从评论来看,听起来 -pid
可能会被传递给printf
(first),然后string split
是 ,当然两者都不喜欢。在 WSL/Ubuntu 上,我遇到了这个问题,但能够通过在字符串开头添加空格来解决它。但是,这似乎不适用于 Mac。您的解决方案确实是更规范的解决方案;用于--
阻止这些命令-pid
按预期解释它们。
因此,top (string split -n " " -- (printf -- "-pid %s " (pgrep dart)))
适用于 MacOS top
,Linux/Ubuntu 所需的唯一更改是将 替换为-pid
,-p
如top (string split -n " " -- (printf -- "-p %s " (pgrep dart)))
.
哪个有效,但非常冗长。为了简化,你想出了:
top (string split " " -- "-pid "(pgrep dart)) # MacOS
top (string split " " -- "-p "(pgrep dart)) # Linux
杰出的!老实说,我从未在 中使用过笛卡尔积fish
,但这显然是您在尝试进行大括号扩展时首先要做的。
使用该示例,我能够将其改进(至少在 Linux 上):
top "-p "(pgrep dart)
但我有一种感觉,等效的东西top "-pid "(pgrep dart)
在 MacOS 上不起作用,因为top "-pid "{45, 23}
对你也不起作用。top "-p "{1,11}
出于某种原因,同样的构造 ( ) 对我有用。
推荐阅读
- elasticsearch - max virtual memory area vm.max_map_count [65530] 太低,增加到至少 [262144] - 永久解决方案
- laravel - Vue.js 和 Axios 获取 pdf 的速度很慢
- assembly - 我无法重置 GICv3 相关寄存器的值?
- c# - .net 没有字符串比较方法有效
- r - 如何创建循环以使我的代码在 R 中更高效?
- github - 如何推送或克隆 GitHub 私有仓库
- wpf - 禁用双击 Bing Map WPF 控件
- c# - 实体框架 + ODATA + 动态列映射
- cas - 指定身份验证后应返回的 CAS
- c - C 代码关于 %d 和 scanf 函数的问题