如何将参数传送到标准输入?

如何将参数传送到标准输入?

我正在尝试使用命令生成私钥keytool,但它要求我输入许多详细信息,例如我的密钥密码、我的姓名和我的组织详细信息。我想在一个命令中传递所有输入。

举个例子:

###SHELL###
$  keytool -genkey -v -keystore TestApp.keystore -alias TestApp -keyalg RSA -keysize 2048 -validity 10000
    Enter passphrase: my  passphrase here
    Repeat the passphrase: my passphrase again
    Enter your full name: my name
    Enter your organization unit: my org. unit
    Enter your organization name: my org. name
    Enter password for keystore (press return for same as key passphrase): i press enter here

   Success!!

$ _  

在这里,我想将所有这些输入(密码、名称等)传输到 STDIN,以便在输入命令后不需要输入这些输入。

这可能吗?如果可以,请告诉我怎么做。我是 Bash 脚本的新手,所以请耐心等待 :)

答案1

您可以使用名为“xdotool”的工具代替您输入命令。例如,如果您想在用户输入中输入以下信息:

1.) 名 2.) 姓 3.) 用户名​​ 4.) 密码 5.) 组织

您可以在脚本中为这些内容设置变量,如以下示例所示:

#!/bin/bash

FNAME="first name"
LNAME="last name"
UNAME="username"
PWORD="password"
ONAME="Organization name"

## This moves the mouse into the specific screen coordinates.
xdotool mouse move # #

## This types the first name and hits enter.
xdotool type "$FNAME"
xdotool key Return

## This types the last name and hits enter.
xdotool type "$LNAME"
xdotool key Return

## This types the username and hits enter.
xdotool type "$UNAME"
xdotool key Return

## This types the password and hits enter.
xdotool type "$PWORD"
xdotool key Return

## This types the organization and hits enter.
xdotool type "$ONAME"
xdotool key Return

xdotool 的作用是发送虚假命令,例如鼠标移动和操作以及键盘输入。就好像您输入了所有这些内容,但实际上您并没有输入。您可以设置一个这样的脚本,每次提示您输入此类信息时都会调用该脚本。为了获取屏幕坐标,您需要将鼠标移动到需要输入的窗口所在的位置,然后使用此命令:

xdotool getmouselocation

这将为您提供鼠标位置的具体坐标。然后...

xdotool click 1

...命令将单击该窗口并使其成为活动窗口,以便脚本可以正确执行。这是一个非常不错的小工具,可以用作任何需要鼠标和键盘的任务的宏。请注意,xdotool 并未预安装在所有 Linux 发行版中,因此您可能需要先安装它。

答案2

您可以使用预计为此。期望脚本看起来应该像这样:

```

#!/usr/bin/expect -f
spawn keytool -genkey -v -keystore TestApp.keystore -alias TestApp -keyalg RSA -keysize 2048 -validity 10000
expect "Enter keystore password:"
send "my_passphrase\n"
expect "Re-enter new password:"
send "my_passphrase\n"
#and so on with the other prompts

```

相关内容