在bash脚本中将字符串发送到stdin

时间:2014-03-07 08:14:39

标签: linux string git bash stdin

我希望我的bash脚本将字符串写入标准输入流。我希望它将密码传递给git push命令。我已经尝试了以下三个选项,但它们都没有工作:git问我密码。

#!/bin/bash

# 0
git push origin master <<< 'password'

# 1
echo 'password' | git push origin master

# 2
git push origin master <<EOF
password
EOF

1 个答案:

答案 0 :(得分:3)

所有这三种方法都可以将字符串password␤传递给命令。

问题是命令无法从标准输入读取密码。它从控制终端读取它,即打开特殊文件/dev/tty并从那里读取。

在ssh传输的情况下,它实际上是ssh,它询问密码并且它以上述方式执行(因此,此讨论适用于基于ssh的ssh或工具的任何其他使用)。在http传输的情况下,git以相同的方式执行。

原因有两个:

  1. 这样您就可以重定向实际命令的输入和/或输出,仍然可以从键盘输入密码并查看终端上的提示
  2. 以防止您尝试做的事情,出于安全原因,强烈建议不要这样做。
  3. 有关如何使用git remote命令而不是每次都给出密码,请参阅Git push: username, password, how to avoid?。如果您坚持使用http,则Is there a way to skip password typing when using https:// on GitHub?Git http - securely remember credentials中的选项会更安全。另请参阅gitcredentials(7)