Bash 脚本,当可执行文件需要 2 个参数时

Bash 脚本,当可执行文件需要 2 个参数时

如果“file.exe”只需要一个数字作为参数,我可以使用以下命令创建一个 .sh 文件(bash 脚本):

#!/bin/bash
($1) | ./file.exe

但是这个程序在两个不同的时刻询问 2 个参数:首先是一个数字,然后是一个字符串:

user@machine:/home/user> ./file.exe
<Please enter a number>
<Please enter a name>

所以我不能只写 .sh 文件

#!/bin/bash
($1 $2) | ./file.exe

我怎样才能创建这个sh文件?

答案1

目前尚不清楚您如何尝试在第一个示例中传递单个参数,但听起来您想向从 stdin 读取输入的进程预先提供两个参数。

以下是向任意程序提供输入的同一想法的两种变体:

(printf "%s\n" "value 1"; date) | ./file.exe

printf "%s\n%s\n" "value 1" "value two" | ./file.exe

在第一个示例中,我们使用子 shell 将两个单独的命令组合在一起,然后将其输出作为输入传递给 file.exe。此示例演示了命令可以是为 file.exe 提供(适当的)输出以供使用的任何内容。

在第二个示例中,我们使用带有两个值的单个 printf 语句,以换行符分隔和终止。可以扩展此示例以向 printf 语句本身提供动态输入:

printf "%s\n%s\n" "$(date)" "$(uptime)" | ./file.exe

或者,正如 Gilles 在评论中指出的那样,打破常规printf,直接简单地通过管道传输命令的输出:

{ date; uptime; } | ./file.exe

答案2

您还可以使用期望:

#!/usr/bin/expect
spawn ./file.exe
expect "<Please enter a number>"
send "123\n"
expect "<Please enter a name>"
send "Joe Bloggs\n"
interact

相关内容