실행 시 Bash 스크립트에는 2개의 매개변수가 필요합니다.

실행 시 Bash 스크립트에는 2개의 매개변수가 필요합니다.

"file.exe"에 인수로 숫자만 필요한 경우 다음을 사용하여 .sh 파일(bash 스크립트)을 만들 수 있습니다.

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

하지만 이 프로그램은 서로 다른 두 시간에 두 개의 인수를 요청합니다. 먼저 숫자, 다음으로 문자열입니다.

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

첫 번째 예에서는 하위 셸을 사용하여 두 개의 개별 명령을 결합한 다음 해당 출력을 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

관련 정보