【发布时间】:2019-03-19 01:44:06
【问题描述】:
我有这个相当简单的命令,当在 bash 中运行时,将剩余的磁盘空间输出到stdout:
echo -n "External1TB: $(grep -Poi '(\/mnt\/External1TB\s+)\K(.*)' <(df -H --output=target,avail))B"
我使用进程重定向<() 将df 的输出通过管道传输到grep,然后处理输出并过滤掉剩余的空间。所有这些都包裹在一个子shell $() 中并馈送到echo,因此我可以在输出前加上磁盘名称。
示例输出:External1TB: 882GB
在交互式 bash shell 中运行时效果相当好,但是如果我尝试使用 bash -c 运行它,如下所示:
bash -c "echo -n "External1TB: $(grep -Poi '(\/mnt\/External1TB\s+)\K(.*)' <(df -H --output=target,avail))B"",
输出始终为:External1TB:。似乎grep 或df 由于某种原因失败了。
我做错了什么?
【问题讨论】:
标签: bash io-redirection quoting subshell