我需要将文件中定义的一些凭据发送到 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 系统当然无法处理。删除它们后,我发布的打印命令现在可以正常工作了。