نحوه تغییر مسیر stderr به stdout در Bash

نحوه تغییر مسیر stderr به stdout در Bash

سعیده مهاجری

یکی از Shell های معروف لینوکس به نام Bash میباشد. هنگام تغییر مسیر خروجی یک دستور به یک فایل یا انتقال آن به یک دستور دیگر، ممکن است متوجه شوید که پیام های خطا روی صفحه، نمایش داده می شوند. در Bash و سایر shell های لینوکس ، هنگامی که یک برنامه اجرا می شود، از سه stream ورودی / خروجی استاندارد استفاده می کند. هر stream توسط یک توصیف گر فایل عددی نشان داده می شود:

  • ۰ – stream ، stdin ورودی استاندارد.
  • ۱ – stream ، stdout خروجی استاندارد.
  • ۲ –  stream ، stderr خطای استاندارد.

توصیف کننده فایل، فقط عددی است که یک فایل باز را نشان می دهد. stream ورودی، معمولا با تایپ کردن در صفحه کلید، اطلاعات را به برنامه می دهد. خروجی برنامه به stream ورودی استاندارد و پیام های خطا به stream خطای استاندارد می رود. به طور پیش فرض، stream ورودی و خطا روی صفحه، نمایش داده می شوند.

تغییر مسیرخروجی :

تغییر مسیر راهی است برای گرفتن خروجی از یک برنامه و ارسال آن به عنوان ورودی به یک برنامه یا فایل دیگر است. Stream ها را می توان با استفاده از عملگر n>، جایی که n شماره توصیف کننده فایل است ارسال کرد. وقتی n حذف شود، به طور پیش فرض به ۱ یا  ( stream خروجی استاندارد ) تبدیل می شود. به عنوان مثال، دو دستور زیر یکسان هستند. هر دو خروجی مسیر دستور stdout را به فایل تغییر میدهند:

command > file
command 1> file

برای تغییر مسیر خطای استاندارد یا (stderr) از عملگر ۲> استفاده کنید:

command 2> file

شما می توانید دستور stderr یا (stream خطای استاندارد) و دستور stdout یا (stream خروجی استاندار) را روی دو فایل جداگانه بنویسید:

command 2> error.txt 1> output.txt

برای اینکه پیام های خطا در صفحه، نمایش داده نشود، مسیر دستور stderr را به / dev / null تغییر دهید:

command 2> /dev/null

تغییر مسیر stderr به stdout :

هنگام ذخیره کردن خروجی برنامه در یک فایل، کاملاً معمول است که مسیر دستور stderr را به دستور stdout تغییر دهید تا بتوانید همه چیز را در یک فایل داشته باشید. برای تغییر مسیر دستور stderr به دستور stdout و ارسال پیام های خطا به همان فایل خروجی استاندارد، از دستور زیر استفاده کنید:

command > file 2>&1

مسیر دستور stdout را به فایل  و ۲> & 1 stderr را به مکان فعلی stdout تغییر دهید. ترتیب تغییر مسیر مهم است. در مثال زیر فقط مسیر دستور stdout را به فایل تغییر میدهد، زیرا دستور stderr قبل از اینکه مسیر stdout را به فایل تغییر دهد، به stdout تغییر داده است.

command 2>&1 > file

راه دیگر برای تغییر مسیر stderr به stdout استفاده از ساختار &> است. در Bash &> همان به معنا ۲> & 1 است:

command &> file

جمع بندی :

درک مفهوم تغییر مسیرها و توصیف کنندگان فایل هنگام کار روی command line بسیار مهم است. برای تغییر مسیر stderr و stdout، از سازه های ۲> & 1 یا &> استفاده کنید.

امیدواریم مطالب مورد پسند بوده باشد.

ما را در شتابان هاست همراهی کنید.