使用扩展变量自动将文件输入发送到命令

使用扩展变量自动将文件输入发送到命令

我需要将文件中定义的一些凭据发送到 VPN 连接命令,该命令正在等待执行时输入用户名和密码。有一个与我的问题类似的要求自动在命令行中输入

以下提供的解决方案对我也有用:

printf 'username\npassword\n' | /usr/sbin/openconnect -i vpn0 ...

(在 shell 脚本中执行)。但我需要传递包含在文件 ( env_properties) 中并作为环境变量加载的凭据。我使用以下命令加载文件内容:

[ -f env_properties] && . env_properties

内容如下

export VPN_USERNAME=myUsername
export VPN_PASSWORD=myPassword

然而,这样的结构不再起作用:

printf "${VPN_USERNAME}\n${VPN_PASSWORD}\n" | /usr/sbin/openconnect -i vpn0 ...

似乎出于某种原因,输入无法正确识别。并且此命令

printf "/usr/sbin/openconnect -i vpn0 ... < env_properties

修改后的文件内容仅包含纯用户名和密码,每个都在新行中。同样适用于这里的文件解决方案。

有任何想法吗?

答案1

代替:

printf "${VPN_USERNAME}\n${VPN_PASSWORD}\n"

尝试这个:

printf "%s\n%s\n" “$VPN_USERNAME” “$VPN_PASSWORD”

答案2

我真傻!输入文件有回车符,Linux 系统当然无法处理。删除它们后,我发布的打印命令现在可以正常工作了。

相关内容