我有一个命令行实用程序,它需要一个文本文件(用于格式化输出)作为参数。我只需要纯值,不需要格式化,所以我想要一个单行脚本来获取值。
文本文件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
(或者可能是替代方案)的结果而不是外部文本文件吗?
我希望有人能帮忙。
Markus
您可以尝试两种方法:
首先,您可能可以使用stdin进行如下输入:
echo '$1' | vclient -h 10.0.0.131:3002 -t - -g getTempKist
一些工具支持文件名参数的特殊值-
,其中-
代表stdin。然而,这取决于命令的实现。
如果您的shell(如bash
或zsh
)支持这一点,您可以使用的第二件事是使用进程替换:
vclient -h 10.0.0.131:3002 -t <(echo '$1') -g getTempKist
如果您试图使用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
使用一个用``包围的命令(对不起,代码格式会给我这些字符带来麻烦)首先计算命令的结果,所以用`包围echo
可能会起作用。