"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني اكتشاف ما إذا كان يتم توجيه أمر في Go؟

كيف يمكنني اكتشاف ما إذا كان يتم توجيه أمر في Go؟

تم النشر بتاريخ 2024-11-13
تصفح:985

How can I detect if a command is being piped in Go?

اكتشاف الأوامر المنقولة في Go

عند تشغيل الأوامر في Go، قد تكون هناك حالات حيث يكون من الضروري تحديد ما إذا كان الأمر يتم نقله أم لا . تعتبر الأوامر المنقولة عبر الأنابيب مفيدة لمعالجة البيانات من أمر أو مصدر آخر مباشرةً من خلال تدفقات الإدخال/الإخراج القياسية.

اكتشاف الأوامر المنقولة عبر الأنابيب باستخدام os.Stdin.Stat()

لاكتشاف ما إذا كان الأمر قد تم إرساله عبر الأنابيب، يمكن للمرء استخدام الأسلوب os.Stdin.Stat() لفحص وضع دفق الإدخال القياسي. يقوم الأسلوب Stat() بإرجاع بنية os.FileInfo التي تحتوي على معلومات متنوعة حول الملف، بما في ذلك الوضع الخاص به.

مثال:

package main

import (
    "fmt"
    "os"
)

func main() {
    fi, _ := os.Stdin.Stat()
    
    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}

في هذا المثال، يتم استخدام الثابت os.ModeCharDevice للتحقق مما إذا كان وضع الإدخال القياسي هو جهاز أحرف. إذا لم يكن الأمر كذلك، فيمكن استنتاج أن البيانات تأتي من الأنبوب. على العكس من ذلك، إذا كان الوضع عبارة عن جهاز أحرف، فإن البيانات تأتي من محطة طرفية.

كيف يعمل:

عندما يتم توجيه الأمر، يتم إدخال الإدخال القياسي الدفق متصل بدفق الإخراج لأمر آخر. يؤدي هذا إلى تغيير وضع دفق الإدخال القياسي إلى وضع توجيه الإخراج بدلاً من وضع جهاز الأحرف. من خلال فحص وضع دفق الإدخال القياسي، يمكننا تحديد ما إذا كان الأمر منقولًا عبر الأنابيب.

التطبيقات:

يمكن أن يكون اكتشاف الأوامر المنقولة عبر الأنابيب مفيدًا في سيناريوهات مختلفة، مثل مثل:

  • التحكم في سلوك الأمر بناءً على ما إذا كان منقولًا عبر الأنابيب أم لا.
  • تقديم خطأ مختلف الرسائل أو تعليمات الاستخدام اعتمادًا على مصدر الإدخال.
  • تحسين التعليمات البرمجية لسيناريوهات الإدخال المختلفة.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3