所以我有这段代码:
if type -P sensors 2>/dev/null; then
returnString=`sensors`
#amd
if [[ "${returnString/"k10"}" != "${returnString}" ]] ; then
$SENSORS | grep Tdie | $CUT -d ' ' -f 10 | { echo "{"; cat; echo "}"; } | tr -d '\n'
#intel
elif [[ "${returnString/"core"}" != "${returnString}" ]] ; then
fromcore=${returnString##*"coretemp"}
$ECHO ${fromcore##*Physical} | $CUT -d ' ' -f 3 | $CUT -c 2-5 | _parseAndPrint
fi
else
$ECHO "[]" | _parseAndPrint
fi它的输出是:
/usr/bin/sensors
{+31.9°C}但是期望的输出是:
{+31.9°C}传感器输出:
/usr/bin/sensors
nvme-pci-0100
Adapter: PCI adapter
Composite: +33.9°C (low = -0.1°C, high = +74.8°C)
(crit = +79.8°C)
k10temp-pci-00c3
Adapter: PCI adapter
Vcore: 1.12 V
Vsoc: 888.00 mV
Tctl: +31.1°C
Tdie: +31.1°C
Icore: 8.00 A
Isoc: 5.00 A 我真的更喜欢让if type -P sensors 2>/dev/null; then留在原地,这样它仍然可以检测到它是英特尔还是AMD。
这行代码在脚本文件中运行,该文件可以在here中找到。
发布于 2021-01-02 10:08:05
我现在不是最聪明的,应该看一下代码的其余部分,应该睡xD。我可以删除检查“传感器”是否可访问的检查(至少我认为这是它的用途)。所以从
if type -P sensors 2>/dev/null; then
returnString=`sensors`
#amd
if [[ "${returnString/"k10"}" != "${returnString}" ]] ; then
sensors | grep Tdie | $CUT -d ' ' -f 10 | { echo "{"; cat; echo "}"; } | tr -d '\n'
#intel
elif [[ "${returnString/"core"}" != "${returnString}" ]] ; then
fromcore=${returnString##*"coretemp"}
$ECHO ${fromcore##*Physical} | $CUT -d ' ' -f 3 | $CUT -c 2-5 | _parseAndPrint
fi
else
$ECHO "[]" | _parseAndPrint
fi我做了
returnString=`sensors`
#amd
if [[ "${returnString/"k10"}" != "${returnString}" ]] ; then
sensors | sed -nE 's/^Tdie: *([^ ]*)/{\1}/p'
#intel
elif [[ "${returnString/"core"}" != "${returnString}" ]] ; then
fromcore=${returnString##*"coretemp"}
$ECHO ${fromcore##*Physical} | $CUT -d ' ' -f 3 | $CUT -c 2-5 | _parseAndPrint
fi发布于 2021-01-02 17:06:26
问题出在type命令上。您只需要此命令的退出状态,但在本例中,它将传感器命令的路径写入stdout。您应该将其stdout重定向到/dev/null。
https://stackoverflow.com/questions/65535280
复制相似问题