2

我有一个命令行实用程序,它需要一个文本文件(格式化输出)作为参数。我只需要纯值,不需要格式化,所以我想有一个单行脚本来获取值。

文本文件template.file仅包含:

$1

这是我的实用程序的一个示例:

vclient -h 10.0.0.131:3002 -t template.file -g getTempKist

我想要的是这样的:

vclient -h 10.0.0.131:3002 -t $(echo '\$1') -g getTempKist

有谁知道如何使用echo(或替代)的结果而不是外部文本文件?

我希望有人能帮帮忙。

马库斯

4

3 回答 3

4

你可以尝试两件事:

首先,您可能可以像这样使用 stdin 作为输入:

echo '$1' | vclient -h 10.0.0.131:3002 -t - -g getTempKist

-一些工具支持文件名参数的特殊值,其中-代表标准输入。但是,这取决于命令的实现。

bash如果您的外壳(如或)支持此功能,您可以使用的第二件事zsh是使用进程替换

vclient -h 10.0.0.131:3002 -t <(echo '$1') -g getTempKist
于 2015-03-24T10:31:36.397 回答
2

如果您尝试将其echo用作一种简单地避免创建临时文件的方法,那么您可能更愿意尝试查看是否可以直接粘贴到stdin. 许多工具支持这一点:

$ cat foo.json 
[1,2,3]

$ python -m json.tool foo.json 
[
    1,
    2,
    3
]

$ python -m json.tool /dev/stdin
[1,2,3]  <-- Paste this into the terminal then press Ctrl-D
[
    1,
    2,
    3
]

因此,对于 OP 中的工具:

$ vclient -h 10.0.0.131:3002 -t /dev/stdin -g getTempKist
\$1  <-- Paste this into the terminal then press Ctrl-D
于 2016-07-11T14:28:17.487 回答
0

使用用 ` 包围的命令(对不起,代码格式给我带来了这些字符的麻烦)首先评估命令的结果,所以echo用 ` 包围你可能会起作用。

于 2015-03-24T10:19:54.533 回答