将两个变量通过管道传递给来自同一命令的两个提示

时间:2018-12-07 04:38:40

标签: linux bash git shell

例如, git clone 'url'会提示用户依次输入用户名和密码。

在shell脚本中, 我有$username$password变量。

如何将这两个变量传递给命令。

我应该做类似的事情吗 echo $password | echo $username | git clone 'url' 但这不起作用

3 个答案:

答案 0 :(得分:2)

有几种方法可以执行此操作。您可能应该应该做的,因为它更安全,所以使用的配置中脚本不必包含并传递用户名和密码。例如,您可以设置ssh,也可以使用凭据帮助器。 (详细信息取决于您的环境,因此我建议您搜索现有的问题和答案,例如:如何设置这些问题和答案。)

如果您仍然希望脚本传递值,则基本上有两种选择:您可以使用git命令的形式在命令行上获取值(请参见brokenfoot的答案),或者可以传递值在STDIN上(这是您正在尝试的方法,但并不完全按照您尝试的方式工作)。

使用|时,会将左侧命令的“标准输出”发送到右侧命令的“标准输入”。因此,当您像显示的那样链接命令时,第一个echo会将输出发送到第二个echo-忽略它。那不是你想要的。

您将需要一个命令来输出用户名,行尾字符,密码和另一个行尾字符。这与回声(至少,不是可移植的)不容易做到。你可以做类似的事情

git clone *url* <<EOF
$username
$password
EOF

答案 1 :(得分:1)

让我假装这个问题既不与git相关,也不与安全相关 我对字面问题“如何将两个变量传递给 程序”是:

( echo $username; echo $password ) | git clone 'url'

也就是说,仅输出两个由换行符分隔的字符串(echo添加换行符);或合而为一 致电echo

echo "$username
$password" | git clone 'url'

答案 2 :(得分:0)

您可以像这样传递变量:

username="xyz"
password="123"
echo  "git clone https://$username:$password@github.com/$username/repository.git"

输出:

git clone https://xyz:123@github.com/xyz/repository.git