这有点奇怪。我正在尝试使用以下命令扫描 iSCSI 设备:
echo 1 > /sys/block/sda/device/rescan >/dev/null 2>&1
# Doesn't work. The rescan won't recognize the new available disk space.
echo 1 > /sys/block/sda/device/rescan
# Works: recognizes the new available disk space.
/dev/null
既然我不希望屏幕变得混乱,如何将所有 stdout 和 stderr 发送到?
答案1
echo 1 > /sys/block/sda/device/rescan >/dev/null 2>&1
^ ^
这里有两个输出重定向。后者生效,所以这相当于:
echo 1 >/dev/null 2>&1
它不会向文件中写入任何内容/sys
。
您在此处运行的命令是echo
,它仅将您要求其在命令行上打印的内容打印到标准输出,因此不会在那里打印任何“令人惊讶”的内容。另外,虽然如果无法打开第一个重定向,您可能会收到错误,但它们很可能在重定向处理时出现,即来自 shell,而不是命令本身,因此即使重定向也2>
可能不会执行任何操作。
另一方面,如果触发重新扫描导致某处输出,则它很可能来自内核,通过通常的日志记录机制。因此,您需要检查日志记录配置是什么来控制它。
如果您使用的是 Linux 虚拟终端,一些内核消息会打印在活动虚拟终端上。您可以使用dmesg -n<level>
设置发送到控制台的消息的优先级。