وضع إخراج الأمر مع التفاعل داخل متغير أثناء استخدام GREP في باش

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

  •  23-08-2019
  •  | 
  •  

سؤال

هذا البرنامج الذي أستخدمه لديه متغيرات خاصة به لتعيينه عند تشغيله، لذلك أريد تعيين هذه المتغيرات ثم Greping الإخراج ثم تخزينه داخل متغير. ومع ذلك، لا أعرف كيف أذهب حول هذه الطريقة الصحيحة. فكرة أنا لا أعمل. التركيز على خطوط 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، ثم قم بتشغيل البرنامج النصي من ملفك الأول، مما يمر الحجج التي تريد تمريرها كوسائط سطر الأوامر. بهذه الطريقة يمكنك اختبارها بشكل منفصل.

يمكنك أيضا القيام بذلك في وظيفة، لكني أحب عمر البرنامج النصي الثاني. أنا لا أطلب بالضبط ما تحاول فعله أعلاه، ولكن شيء مثل:

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