我正在尝试打印内存细节。使用shell脚本的Total,free和used内存。这是我的代码 -
printf "\nSystem Details\n"
printf "CPU $(cat /proc/cpuinfo | grep "model name" | head -1)"
printf "Total Memory:"
printf "$(awk '/^Mem/ {print $3}' <(free -m))"
但是终端没有显示任何内存细节。它显示了这个错误。
Memory:info.sh: command substitution: line 23: syntax error near unexpected token `('
info.sh: command substitution: line 23: `awk '/^Mem/ {print $3}' <(free -m))"'
答案 0 :(得分:2)
让我们在bash
下运行相关行:
$ printf "$(awk '/^Mem/ {print $3}' <(free -m))"
5603$
有效。现在,让我们在dash
下尝试:
$ printf "$(awk '/^Mem/ {print $3}' <(free -m))"
dash: 1: Syntax error: "(" unexpected
现在,我们看到有关意外(
的语法错误。该错误是因为dash
不支持process substitution
。
如果你想在dash
或类似的shell下运行,解决方案就是改用管道:
$ printf "$(free -m | awk '/^Mem/{print $3}')"
5623$
bash,zsh,Ksh88,ksh93支持进程替换,但不支持pdksh,mksh或dash。所有POSIX shell都应该支持管道方法。
只要输出不包含printf-active字符,上述操作就可以正常工作。最好使用显式格式字符串,从而避免令人不快的意外:
printf "%s" "$(free -m | awk '/^Mem/{print $3}')"