「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