実行時にBashスクリプトには2つのパラメータが必要です。

実行時にBashスクリプトには2つのパラメータが必要です。

「file.exe」に引数として数字のみが必要な場合は、次のようにして.shファイル(bashスクリプト)を作成できます。

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

ただし、プログラムは2つの異なる時間に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から入力を読み取るプロセスに2つの引数を事前に提供したいようです。

任意のプログラムに入力を提供する同じアイデアの2つのバリエーションは次のとおりです。

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

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

最初の例では、サブシェルを使用して 2 つの個別のコマンドを結合し、その出力を file.exe に入力として渡します。この例は、コマンドが消費のためにfile.exeに(適切な)出力を提供するすべてのものである可能性があることを示しています。

2番目の例では、改行文字で区切られ、終了する2つの値を持つ単一の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

関連情報