如何将 shell 变量传递给读取脚本中控制台输入的命令?

如何将 shell 变量传递给读取脚本中控制台输入的命令?

我正在尝试制作一个脚本,其中使用一个命令要求用户在提示中输入一些数据。

假设我想包含git push在脚本中(我知道这不是最佳实践,但每个人都会明白我这样问的是什么。)

git push因此,当您在控制台中使用时,它会要求输入用户名和密码。当git从 shell 脚本调用时如何传递它们,并且两者都存储为 shell 变量?

它应该看起来像

#!/bin/bash

git push
$user
$password

答案1

最简单的方法似乎是将其通过管道传递给外部命令:

printf "%s\n%s\n" "$用户" "$密码" |命令_期望_用户名_和_密码

$user这将输出和的内容$password,每个内容后跟一个换行符,并将输出重定向到stdin外部进程的 ,如果以交互方式调用,则该外部进程应该期望用户按该顺序输入用户名和密码。

如果您想执行更复杂的操作,您可能需要研究脚本。

笔记正如 Kusalananda 所说,只有当程序从它们读取这些信息stdin而不是直接从终端设备读取这些信息时,这才有效(然而,在请求身份验证信息时这似乎很常见),并且在实际应用它时不起作用git(这您作为一个使用示例提供了)。

答案2

您正在寻找的工具是 expect

https://linux.die.net/man/1/expect

它是一个自动与 TTY 交互的工具。

请记住,它不安全,要在没有密码的情况下推送到 github,您应该使用 ssh

git remote add origin [email protected]:name/repo

尽管远程“来源”可能已经在您的存储库中。

https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh

设置 ssh 公钥和私钥并将它们添加到 ssh 代理后,您将不需要输入密码来推送或拉取

相关内容