وهناك القليل من إعادة توجيه قذيفة

10 مايو 2009 بواسطة براشانت
قدم تحت : التكنولوجيا

هنا هو كيف نفعل عادة توجيه قذيفة
$ ./pgm.sh args >out.txt 2>err.txt
كنت أرغب في تعديله قليلا وتشغيل على النحو التالي
$ ./pgm.sh args
مع اشتراط أن الإخراج والخطأ يجب ان تذهب الى بعض المحسوبة داخل ملف pgm.sh على أساس وسائط. يمكن للمرء أن يكون حالة توضيحية عند تاريخ هو جزء من وسائط. فهل ترضى المعياري للذهاب الى القول / الخاص / الدليل / pgm_out_YYYYMMDD.txt 1

المشكلة مع الطريقة القياسية لإعادة توجيه N>file.txt أي ربط ملف N اصف لfile.txt ، هو أنه يعمل فقط لعملية متشعب وليس حديثا للعملية الحالية.
هكذا
$ echo hi 1>out.txt ; echo hii . سترسل مرحبا لout.txt لكن سيتم طباعة HII إلى stdout 2

هذا هو المكان الذي exec يأتي لإنقاذنا. إذا أضفنا exec 1>somefile.txt ثم خرج من بقية النصي الانتقال إلى somefile.txt

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
وسوف $ / test.sh توجيه مرحبا ، وكذلك إلى HII out.txt

على نحو مماثل لتوجيه stdout فضلا STDERR سنفعل شيئا من هذا القبيل
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp

عادت الآن إلى النقطة الأصلية إلى إعادة توجيه بعض الملفات من داخل وعاء ، دعونا نقول ملف البرنامج حسابها في بعض OUTFILE متغير ، قد فعلنا للتو exec 1>$OUTFILE

ان حل المشكلة الحالية. ولكن قد تريد أن تذهب من خلال المثال التالي الذي يحقق 'الوصول العشوائي" من ملف نصي في قذيفة. مثال على ذلك هو من هنا
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890

مع تعليق ، هذا الرمز هو تفسيرية النفس.
--
1 كما يمكن أن تقوم به $ ./pgm.sh args >pgm_out`date +%Y%m%d` ولكن الفكرة هي لتوليد هذا اسم الملف استنادا إلى بعض المنطق في البرنامج نفسه
2 في 1 1> out.txt لا لزوم لها لكنها توضح هنا أننا توجيه فد 1

تعليقات

    بلوق التعليقات مدعوم من عراقنا الإخبارية