لإصلاح خطأ في أمر Less من خلال الإشارة إلى no.من المعلمات

StackOverflow https://stackoverflow.com/questions/1079853

  •  22-08-2019
  •  | 
  •  

سؤال

هذا السؤال مبني على هذا الموضوع.

الرمز

function man()
{       
    man "$1" > /tmp/manual; less /tmp/manual 
}

مشكلة: إذا استخدمت خيارًا واحدًا، فلن يعرف الأمر مكان الدليل المطلوب

على سبيل المثال،

man -k find

يعطيني خطأ، لأن المرجع خاطئ.يقرأ الأمر -k كدليل.

محاولتي لحل المشكلة في الكود الزائف

if no parameters
    run the initial code
if one parameter
    run: man "$2"
...

بمعنى آخر، نحتاج إلى إضافة علامة اختيار إلى البداية

كود مزيف

    man $optional-option(s) "$n" > /tmp/manual; less /tmp/manual

حيث $ن

  • ن = 1 إذا كانت الخيارات صفر
  • ن = 2 إذا كان هناك خيار واحد
  • ن = 3 إذا كان هناك خياران
  • ....

كيف يمكنك إجراء "فحص الخيارات" بحيث يمكنك تغيير قيمة $n؟

المشكلة المطورة: لعمل حلقتين if للمواقف من n=1 إلى n=2

هل كانت مفيدة؟

المحلول

ماذا عن تمرير جميع الحجج

function man()
{       
    man $@ > /tmp/manual; less /tmp/manual 
}

ما هو الخلل في أقل مما ذكرته في العنوان؟

نصائح أخرى

أولاً، يمكنك تمرير جميع وسيطات وظيفتك إلى man باستخدام $* أو $@.يمكنك القراءة man sh للحصول على تفاصيل دقيقة عن الفرق بين الاثنين؛القصة القصيرة تُستخدم دائمًا تقريبًا "$@" مع علامات الاقتباس المزدوجة.

ثانيا، الملف المؤقت غير ضروري.يمكنك جعل هذا أكثر نظافة عن طريق توصيل مخرجات الأنابيب man مباشرة الى less:

function man() {
    man "$@" | less
}

بالمناسبة، إذا كنت تحاول فقط استخدام جهاز بيجر مختلف (man الاستخدامات more وتريد مربي الحيوانات less) هناك معترف به عادة PAGER متغير البيئة الذي يمكنك تعيينه لتجاوز جهاز النداء الافتراضي.يمكنك إضافة هذا إلى الخاص بك ~/.bashrc على سبيل المثال لإخبار كافة البرامج للاستخدام less عند عرض شاشات متعددة للإخراج:

export PAGER=less

للإجابة على سؤالك الدقيق، يمكنك التحقق من عدد الوسائط باستخدامها $#:

if [ $# -eq 0 ]; then
    : # No arguments
elif [ $# -eq 1 ]; then
    : # One argument
# etc.

قد تجد أيضًا shift الأمر مفيد.يتم إعادة تسمية $2 ل $1, $3 ل $2, ، وما إلى ذلك وهلم جرا.غالبًا ما يتم استخدامه في حلقة لمعالجة وسيطات سطر الأوامر واحدة تلو الأخرى:

while [ $# -gt 1 ]; do
    echo "Next argument is: $1"
    shift
done

echo "Last argument is: $1"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top