سؤال

لديّ نص Shell Fish الذي يتمثل سلوكه الافتراضي في إرسال بريد إلكتروني عند اكتماله. أود تعديله للرد على nomail حجة من سطر الأوامر. لذلك ، على سبيل المثال ، فإن تشغيل البرنامج النصي عادة ما ينتج بريدًا إلكترونيًا:

michaelmichael: ~/bin/myscript

ولكن إذا ركض مع nomail التبديل ، لن يرسل البريد الإلكتروني للتأكيد:

michaelmichael: ~/bin/myscript nomail

إذا قمت بتشغيل البرنامج النصي مع nomail حجة ، إنها تعمل بشكل جيد. بدون nomail, $argv غير محدد ويرمي خطأ. لقد بحثت عن وثائق Fish Shell ، لكن لا يمكن أن تجد أي شيء ينجح. هذا ما لدي حتى الآن

switch $argv
  case nomail
    ## Perform normal script functions
  case ???
    ## Perform normal script functions
    mailx -s "Script Done!"
end

تشغيل هذا يرمي الخطأ التالي:

switch: Expected exactly one argument, got 0

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

أظن أن هذا أمر أساسي ، لكنني لا أفهم البرمجة النصية بشكل جيد للغاية.

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

المحلول

لف الخاص بك switch بيان مثل هذا:

if set -q argv
    ...
end

أيضًا ، أعتقد أن حالتك الافتراضية يجب أن تكون case '*'.

نصائح أخرى

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

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top