وهناك القليل من إعادة توجيه قذيفة
هنا هو كيف نفعل عادة إعادة توجيه قذيفة
$ ./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
$. / سوف test.sh توجيه مرحبا، وكذلك إلى HII out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
وبالمثل لتوجيه 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 لا لزوم لها لكنه يوضح هنا أن نقوم بإعادة توجيه FD 1



































