我想运行smartctl -a
,并使用该输出中的设备序列号作为存储输出的文件名。我知道这可以通过调用smartctl
两次并使用适当的文本操作对输出进行切片来完成。有没有办法只需要一次调用就可以做到这一点smartctl
?
答案1
将 的输出存储smartctl
到变量中并根据需要多次使用它。
smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"
答案2
您可以将输出存储smartctl -a
在临时文件中,然后对其进行双重解析。这使得测试您的脚本变得快速(生成临时文件一次,注释掉对 的调用smartctl
,调整您的解析器直到满意为止,然后取消注释该smartctl
行。
或者,您可以使用pee
管道将输出传输smartctl -a
到两个程序中,但您仍然需要一个进程中的临时文件,可以使用另一个进程找到的序列号对其进行重命名。