我正在尝试制作一个脚本,其中使用一个命令要求用户在提示中输入一些数据。
假设我想包含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
尽管远程“来源”可能已经在您的存储库中。
设置 ssh 公钥和私钥并将它们添加到 ssh 代理后,您将不需要输入密码来推送或拉取