مازندهاست | خدمات میزبانی وب

تفاوت && و ; در دستورات bash لینوکس چیست؟

اگر که با لینوکس و دستورات آن کمی کار کرده باشید احتمالا این مورد یا مشابه آن برای شما آشنا خواهد بود:

Bash
ls -lh /chert_o_pert/ && df -h
ls -lh /chert_o_pert/; df -h

اما به نظر شما خروجی این دو دستور یکی هست و در صورت اجرای هر دو خط در لینوکس انتظار دارید که هرکدام دو تا خروجی به شما بدهد؟

ابتدا دو اپراتور && و ; را به صورت خلاصه با ذکر تفاوت بیان کنیم:

  • اپراتور && به معنای and یا و هست که در صورتی که دستور قبل آن با کد 0 به اتمام برسد و خطایی نداشته باشد دستور دوم اجرا می‌شود. اما اگر دستور اول به هر دلیلی با خطا مواجه شود دستور دوم اجرا نمی‌شود.
  • اپراتور ; به این معناست که دستور قبلی هرچه که باشد هر زمان که انجام شد (فارغ از صحیح یا غلط اجرا شدن آن) و به اتمام رسید، دستور بعدی را اجرا کند.

خروجی دستور اول:

Bash
ls: cannot access '/chert_o_pert/': No such file or directory

همان‌طور که می‌بینید bash به محض عدم اجرای صحیح دستور اول، دیگر ادامه نداد و به stdin برگشت.

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

Bash
ls -lh /chert_o_pert/; df -h
ls: cannot access '/chert_o_pert/': No such file or directory
Filesystem                         Size  Used Avail Use% Mounted on
udev                               1.9G     0  1.9G   0% /dev
tmpfs                              394M  2.2M  392M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   39G   19G   18G  52% /