在Fish Shell中将awk输出设置为变量

3

我正在使用fish shell,但似乎无法将awk的输出设置为变量。

set installed_version (scala -version 2>&1 | awk 'NR==1{ print $5 }')

你知道为什么会出现这种情况吗?

编辑:但是这个可以正常工作。

set foo (java -version 2>&1 | awk 'NR==1{ print $3 }')

你是如何确定变量没有被设置的? - ridiculous_fish
运行简单命令 scala -version 后,你会得到什么输出? - jas
通过回显变量的值。scala -version 的输出是 Scala code runner version 2.11.5 -- Copyright 2002-2013, LAMP/EPFL。而且这不仅仅是 Scala。我有一个类似的命令用于 SBT,也无法正常工作。 - aa8y
尝试尝试将输出重定向到不同的方式:scala -version >/dev/null^/dev/null等,以确定它实际上在哪个流上。 - glenn jackman
2个回答

4

Scala 进入后台,启动 REPL,因为它认为标准输入是终端。以下内容适用于我:

set installed_version (scala -version 2>&1 < /dev/null | awk 'NR==1{ print $5 }')
echo $installed_version

1
这是fish bug #1949 - fish在子进程中不运行命令替换,因此将标准输入连接到tty。因此,某些工具不能像应该的那样工作。
Joe Hildebrand的解决方法(显式重定向</dev/null)目前是正确的做法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接