在应用程序参数上模拟从文件读取

时间:2017-11-08 23:42:48

标签: bash shell arguments command-line-interface sh

我正在使用一个命令行应用程序(geth),它接受参数--password ,它需要一个包含密码的文件的有效路径,即:< / p>

geth --password /some/path/to/password/file

我正在尝试在命令行上指定密码(我知道安全隐患)而不是将其保存在文件中,例如:

geth --password `echo P@ssWordHer3`

以上操作不起作用,因为geth正在搜索名为P@ssWordHer3的文件,该文件不存在:

  

致命:无法读取密码文件:打开P @ ssWordHer3:没有这样的文件   或目录

我正在考虑创建一个接受密码作为参数并输出它的shell脚本,但我想它也不起作用,因为geth会尝试阅读文件内容而不是输出

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

这就是称为process substitution的ksh和bash功能用于:

#!/usr/bin/env bash
#              ^^^^- also works on ksh, but not on baseline-POSIX /bin/sh

geth --password <(echo 'P@sswordHer3')

<(...)扩展将替换为文件名,当读取时,将返回其中包含的代码的输出。

请注意,这是一个FIFO(命名管道或/dev/fd/... - 样式名称,具体取决于操作系统),因此它只能读取一次,从前到后,并且不允许寻求或重读。

如果你需要一个真实的文件,而不是一个FIFO,zsh(我个人不推荐)也有一个扩展:

#!/usr/bin/env zsh
geth --password =(echo 'P@sswordHer3')