bash에서 grep을 사용하는 동안 변수 내부의 상호 작용으로 명령의 출력
문제
내가 사용하는이 프로그램에는 실행할 때 설정할 자체 변수가 있으므로 변수를 설정 한 다음 출력을 방목하여 변수 안에 저장하려고합니다. 그러나 나는 이것에 대해 올바른 방법으로가는 방법을 모른다. 내가 가진 아이디어는 작동하지 않습니다. 초점은 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
상호 작용의 일부로.
제휴하지 않습니다 StackOverflow