0

我有:

$ module avail firefox --latest
---------------------------------------------------------- /env/common/modules -----------------------------------------------------------
firefox/83.0

我想将firefox/83.0上述结果的一部分提取到一个新命令中:

$ module load firefox/83.0

这是我到目前为止所拥有的,但似乎我无法将结果从grep下一个命令传递到:

$ module avail firefox --latest | grep firefox | echo module load 

注意:这是在没有此功能的模块module load app/latest版本上。

4

3 回答 3

1

使用正则表达式仅捕获firefox/83.0,然后使用命令替换在下一个命令中使用该结果;

module load $(module avail firefox --latest | sed -nre 's/^firefox\/[^0-9]*(([0-9]+\.)*[0-9]+).*/\0/p'

有关正则表达式的更多信息:如何使用 sed 提取版本号?


使用xargs;

module avail firefox --latest | sed -nre 's/^firefox\/[^0-9]*(([0-9]+\.)*[0-9]+).*/\0/p' | xargs module load
于 2020-12-07T13:08:04.463 回答
0
module load "$(module avail firefox --latest | grep -Eo 'firefox\/[[:digit:]]+\.[[:digit:]]+')"

使用模块avail 命令的输出,然后搜索firefix,后跟一个/,然后是一个数字一次或多次,一个句号,然后是一个数字一次或多次。将此输出用作模块加载命令的一部分

于 2020-12-07T13:07:51.090 回答
0

似乎我无法将 grep 的结果传递到下一个命令:

您可以,但您需要使用其他命令,该命令将从管道中读取并将其添加为命令参数。很简单:

$ module avail firefox --latest | grep firefox | xargs module load 
于 2020-12-07T13:11:24.540 回答