我试图列出 httpd 进程的文件,我尝试了以下方法:
ls -l /proc/{`pidof httpd | tr ' ' ','`}/
ls: cannot access /proc/{{28493,28492,28491,28490,28489,28488,28487,28486,28483}}/: No such file or directory
但如果我自己把 PID 放在括号内,它就会起作用:
ls -l /proc/{28493,28492,28491,28490,28489,28488,28487,28486,28483}/ | head -6
/proc/28483/:
total 0
dr-xr-xr-x 2 root root 0 Jan 30 11:18 attr
-rw-r--r-- 1 root root 0 Jan 30 11:18 autogroup
-r-------- 1 root root 0 Jan 30 11:18 auxv
我相信在第一种情况下,shell 将反引号输出视为单个参数,并且不扩展。所以我想知道,有没有办法让它看起来像一个要扩展的列表?我知道我可以通过 for 循环或许多其他方式来做到这一点。我特别有兴趣了解有关反引号和大括号扩展的更多信息,假设可以做到这一点。
答案1
in 中的求值顺序bash
是先完成大括号扩展,然后才处理命令替换。
以下是 完成操作的顺序bash
:
- 支撑扩张,
- 波形符扩展,
- 参数和变量扩展,
- 命令替换,
- 算术展开式,
- 分词,
- 路径名扩展。
替代解决方案:
for pid in $( pidof httpd ); do ls -l /proc/"$pid"; done