스크립트에서 source 명령을 사용하되 터미널 명령줄에서 입력 파일을 정의하세요.

스크립트에서 source 명령을 사용하되 터미널 명령줄에서 입력 파일을 정의하세요.

현재 변수를 읽고 아래와 같이 작동하는 스크립트가 있습니다.

#!bin/bash
a=10
b=15
c=20

d=a*b+c
echo $d

하지만 다음을 포함하는 입력 파일로 분할하고 싶습니다.

a=10
b=15
c=20

그리고 작업을 수행하는 스크립트

#!/bin/bash
d=a*b+c
echo $d

그리고 이렇게 불릴 것입니다.

./script.sh < input.in

이제 좀 파헤쳐보고 간단한 것을 만들어 보았습니다.

./script.sh < input.in

이렇게 하면 답 170이 반환됩니다.

그러나 이것은 작동하지 않습니다. 좀 더 찾아보니 스크립트에 "source"라는 명령이 필요한 것 같은데, 이 경우에는 어떻게 해야 할지 잘 모르겠습니다.

할 수 있나요? 이를 수행하는 가장 좋은 방법은 무엇입니까?

답변1

에서 help source:

source: source filename [arguments]
    Execute commands from a file in the current shell.

    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.

    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

따라서 스크립트에 다음 줄을 추가하면 됩니다.

source input.in

또는 이 (POSIX 버전):

. input.in

런타임에 입력 파일을 전달하려면 다음을 사용할 수 있습니다.위치 매개변수:

source "$1"
. "$1"

또한 d=a*b+c"정수" 속성이 없으면 작동하지 않습니다.d

declare -i d
d=a*b+c

아니면 당신이 사용산술 확장작업 수행:

d=$((a*b+c))

예:

#!/bin/bash
source "$1"
d=$((a*b+c))
echo "$d"
$ ./script.sh input.in
170

답변2

이것은 매우 기본적인 작업입니다. 파일 source이름 만 .입력하면 결과는 이 줄이 기본 스크립트에 포함된 것과 같습니다.

구문은 간단합니다.

source file_name

또는

. file_name

약간의 뉘앙스가 있지만 이것은 더 발전된 것입니다. man bash | grep source자세한 내용은 참조하십시오 .

관련 정보