我正在开发 SLURM 集群,有一个命令可以列出所有已加载的软件模块。我想处理输出,即 grep 查找某个单词。但是,如果我尝试使用管道,我会得到我不理解的意外输出。
$ module list
Currently Loaded Modules:
1) miniconda3-4.8.2-gcc-8.3.1-altn3cq
$ which module
module ()
{
eval $($LMOD_CMD bash "$@") && eval $(${LMOD_SETTARG_CMD:-:} -s sh)
}
$ module list | wc -l
Currently Loaded Modules:
1) miniconda3-4.8.2-gcc-8.3.1-altn3cq
0
$ module list | grep conda
Currently Loaded Modules:
1) miniconda3-4.8.2-gcc-8.3.1-altn3cq
因此我想知道为什么我不能通过管道输出module list
答案1
该命令似乎将输出发送到 STDERR 而不是 STDIN。因为终端显示这两者,所以你可以通过这种方式得到这些东西。要将 STDERR 发送到 STDIN 并能够过滤命令输出,可以使用以下方式:
module list 2>&1 | grep conda