تغییر مسیر ارور های خروجی به فایل در لینوکس

  • شروع کننده موضوع ruin3r
  • تاریخ شروع

ruin3r

مدیر کل انجمن
عضو کادر مدیریت
مدیر کل انجمن
عضویت
10/5/15
ارسال ها
146
امتیاز
6
سلام.
در این مقاله شمارو با نحوه نغییر مسیر یا ریدایرکت ارورها یا خروجی دستوراتی که در صفحه نمایش لینوکس نمایان می شود به داخل یک فایل آشنا می کنم.
عموما برنامه نویسان بش با این روش آشنا هستند ولی برای تکمیل آموزش بش نیاز به این مورد وجود دارد.

برای ریدایرکت کردن ارور سینتکس آن به طور زیر است :

کد:
cmd > file
ls > file
عموما خطاها در محیط بش k شل و یا پوسته های مدرن تر به سه صورت توصیف می شوند:

کد:
    stdin(0)
    stdout(1)
    stderr(2)


نحوه تغییر مسیر تمامی خروجی ها به یک فایل

تغییر مسیر خروجی (stdout) شرح زیر است:

کد:
command-name >  output.txt
command-name >  stdout.txt

تغییر مسیر تمام خطاها به یک فایل:
تغییر مسیر خطا (stderr) به شرح زیر است:

کد:
command-name 2> errors.txt
command-name 2> stderr.txt


نحوه تغییر مسیر هر دو خروجی (خروجی استاندارد) و خطاها (stderr) به فایل های مختلف:

کد:
command1 > out.txt 2> err.txt
command2 -f -z -y > out.txt 2> err.txt



نحوه تغییر مسیر هر دو خروجی (خروجی استاندارد) و خطا (stderr) به همان پرونده:

کد:
command1 > everything.txt 2>&1
command1 -arg > everything.txt 2>&1

نحوه تغییر مسیر خطا (stderr) به تهی یا صفر

در این حالت خطاها به یک فایل تهی تغییر مسیر می دهند.در نظر داشته باشید که حتما متن خطا اسپم بوده و باید به حالت صفر یا تهی تبدیل شود:

کد:
command1 2> /dev/null
command1 2> /dev/zero
command2 -arg 2> /dev/null
command2 -arg 2> /dev/zero

نکته : استفاده از دستور تیی برای نمایش و تغییر مسیر خطا یا خروجی ها :
کد:
command1 |& tee log.txt
## or ##
command1 -arg |& tee log.txt
## or ##
command1 2>&1 | tee log.txt

استفاده های دیگر
کد:
#!/bin/bash
# My script to do blah ...
foo(){
:
} 2>&1 | tee foo.log
یا
کد:
#!/bin/bash
# My script to do blah ...
{
   command1
   command2
} 2>&1 | tee script.log
موفق باشید.
شاهین سالک توتونچی
 
آخرین ویرایش:
بالا