هل هناك طريقة التقاط الإخراج من الأمر ، قيمة عودتها إلى المتغيرات في قذيفة النصي ؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

لذلك دعونا نقول أن أكون قد أمر ، foo, في البرنامج النصي يجب إرجاع القيمة و إخراج السلسلة التي أنا مهتم في لتخزين تلك إلى متغير (حسنا على الأقل انتاجها لهذا المتغير ، و عودتها قيمة يمكن استخدامها في المشروط).

على سبيل المثال:

a=$(`foo`)   # this stores the output of "foo"
if foo; then # this uses the return value
    stuff...
fi

أفضل شيء يمكن أن أفكر لالتقاط أن الناتج هو استخدام بعض الملفات المؤقتة:

if foo > $tmpfile; then
    a=$(`cat $tmpfile`)
    stuff...
fi

هناك على أية حال أنا يمكن تبسيط ذلك ؟

هل كانت مفيدة؟

المحلول

وهذا؟

out=$(cmd)
rv=$?
if test $rv -eq 0; then
  echo "all good"
  echo $out
else
  echo "wtf, exit code was $rv"
fi

وراجع للشغل، $ () وbackticks نوعان من جمل لنفس الغرض، مما يعني أنك فقط تريد الكتابة

$(`foo`)

وإذا foo إخراج نص الأمر الذي تريد تنفيذه مرة أخرى. مثل:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)

نصائح أخرى

output=`foo`
echo "Return: $?" # $? is the return code

من bash:(الملاحظة الأولى $ في العمود الأول هو موجه)

$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc

لا تستخدم $() بالإضافة إلى backticks ، كما أن الواقع ينفذ الأمر ثم ينفذ انتاجها.

انظر أيضا:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top