bash에서 grep을 사용하는 동안 변수 내부의 상호 작용으로 명령의 출력

StackOverflow https://stackoverflow.com/questions/891988

  •  23-08-2019
  •  | 
  •  

문제

내가 사용하는이 프로그램에는 실행할 때 설정할 자체 변수가 있으므로 변수를 설정 한 다음 출력을 방목하여 변수 안에 저장하려고합니다. 그러나 나는 이것에 대해 올바른 방법으로가는 방법을 모른다. 내가 가진 아이디어는 작동하지 않습니다. 초점은 7-14 행에 있습니다.

1  #!/usr/local/bin/bash
2  source /home/gempak/NAWIPS/Gemenviron.profile
3  FILENAME="$(date -u '+%Y%m%d')_sao.gem"
4  SFFILE="$GEMDATA/surface/$FILENAME"
5  echo -n "Enter the station ID: "
6  read -e STATION
7  OUTPUT=$(sflist << EOF
8  SFFILE = $SFFILE
9  AREA = @$STATION
10 DATTIM = all
11 SFPARM = TMPF;DWPF
12 run
13 exit
14 EOF)
15 echo $OUTPUT

그러나 나는 이것을 얻는다 :

./listweather: line 7: unexpected EOF while looking for matching `)'
./listweather: line 16: syntax error: unexpected end of file
도움이 되었습니까?

해결책

모든 사람의 답변을 정리하면서 나는 일하는 솔루션을 직접 발견했습니다. 이 코드는 나에게 작동합니다.

#!/usr/local/bin/bash
source /home/gempak/NAWIPS/Gemenviron.profile
FILENAME="$(date -u '+%Y%m%d')_sao.gem"
SFFILE="$GEMDATA/surface/$FILENAME"
echo -n "Enter the station ID: "
read -e STATION

OUTPUT=$(sflist << EOF
SFFILE = $SFFILE
AREA = @$STATION
DATTIM = ALL
SFPARM = TMPF;DWPF
run
exit
EOF
)
echo $OUTPUT | grep $STATION

모두 감사합니다!

다른 팁

프로그램을 별도의 .sh 스크립트 파일로 실행 한 다음 첫 번째 파일에서 스크립트를 실행하여 명령 줄 인수로 전달하려는 인수를 전달합니다. 그렇게하면 별도로 테스트 할 수 있습니다.

당신은 또한 함수에서 그것을 할 수 있지만, 나는 두 번째 스크립트의 모듈성을 좋아합니다. 나는 당신이 위에서하려는 일을 정확히 udnersting하는 것이 아니라 다음과 같은 것입니다.

runsflist.sh:
#!/bin/bash

FILENAME="$(date -u '+%Y%m%d')_sao.gem"
SFFILE="$GEMDATA/surface/$FILENAME"
AREA = @$STATION
DATTIM = all
SFPARM = TMPF;DWPF
grep $STATION | sflist

main.sh:
#!/bin/bash

echo -n "Enter the station ID: "
read -e STATION
OUTPUT=`runsflist.sh`
echo $OUTPUT

sflist가 상호 작용이 필요한 경우 다음과 같은 것을 시도 할 것입니다.

SFFILE=$(
  ( echo SFFILE = "$SFFILE"
    echo AREA = "@$STATION"
    echo DATTIM = all
    echo SFPARM = TMPF;DWPF
    echo run
    cat
  ) | sflist)

불행히도, 당신은 입력해야합니다 exit 상호 작용의 일부로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top