זוהי הפקודה dacsexpr שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
dacsexpr - DACS מעטפת שפה ביטוי ומתורגמן
תַקצִיר
dacsexpr [-x] [dacsoptions[1]] [אדון] [-e ביטוי] [-n] [-p] [-s] [-h | עזרה] [-מבחן]
[--] [שם הקובץ] [script-arg...]
תיאור
תוכנית זו היא חלק מ- DACS סוויטה.
השמיים dacsexpr כלי השירות מעריך DACS ביטויים (ראה dacs.exprs(5)[2]). לעתים קרובות זה א
סיוע שימושי בעת חיבור או בדיקה של ביטויים לשימוש בכללי בקרת גישה, או
בעת איתור באגים של ACL והוראות תצורה. בעוד שהם ממשיכים להיקרא
"ביטויים" מסיבות היסטוריות, אפשר היה לכתוב תוכניות קטנות, ו
השפה יכולה להיות שימושית גם כשפת סקריפטים פשוטה ללא תלות בשאר
DACS.
אם מסופק ביטוי, הוא מוערך והתוצאה מודפסת לפי התקן
תְפוּקָה. ניתן לציין ביטוי אחד לכל היותר. אם ה -q ניתן דגל (אחד מה
dacsoptions[1]), שום דבר לא מודפס, שגיאות הערכת ביטוי נדחקות, וה-
התוכנית מסתיימת עם מתאים יציאה מצב[3]; אחרת התוצאה נכתבת ל
הפלט הסטנדרטי. אם גם א -q ניתן דגל ולא שום דגל השולט ברישום
רמה, ואז רמת הרישום מוגדרת כדי להזהיר עוקף כל רישום של קבצי תצורה
הנחיית רמה; התנהגות זו בדרך כלל נוחה.
אם לא מסופק ביטוי, התוכנית קוראת את הקלט הסטנדרטי שלה. אם הקלט אינו
מגיע מהתקן מסוג מסוף, התוכנית פועלת ב"מצב אצווה" וההנחיה היא
מדוכא; אחרת, התוכנית פועלת ב"מצב אינטראקטיבי". כאשר תתבקש להיכנס
מצב אינטראקטיבי, הכנס לעזור לעזרה. אם ה קריאת שורה(3)[4] הפונקציונליות הייתה
מוגדר כאשר התוכנית נבנתה, עריכת שורת הפקודה וההיסטוריה זמינים ב
מצב אינטראקטיבי.
אם התוכנית מופעלת באמצעות "#!" של המערכת מנגנון, שורת פקודה אחת או יותר
ניתן לתת טיעונים:
#!/usr/local/dacs/bin/dacsexpr -test
// expect-exact:17
${x} = 17;
תוכניות כאלה תמיד משתמשות בקובץ הסקריפט כקלט, ולכן אין ביטוי או קובץ אחר
ניתן לציין ב-"#!" קַו.
השמיים בערך מרחב השמות מאותחל מסביבת התוכנית. לדוגמה, אם הערך
של משתנה הסביבה LOGNAME זה בובו, אם כך ${Env::LOGNAME} יבוצע מופע
עם הערך הזה. מתעלמים בשקט משמות משתנים לא חוקיים מבחינה תחבירית.
הערות
הנחיות התצורה וה Conf מרחב שמות משתנים זמינים רק אם א
קובץ התצורה מעובד (למשל, על ידי מתן ה- -uj דגל שורת הפקודה). זה
רלוונטי, למשל, אם ה http()הפונקציה [5] נקראת באמצעות סכימת https
כי פעולה תקינה תדרוש את SSL_PROG[6] הנחיה להגדרה. לִרְאוֹת
dacs.conf(5)[7].
אפשרויות
אם ביטוי או קובץ עדיין לא צוינו, שם קובץ עשוי להופיע בתור האחרון
טַעֲנָה. אם שם הקובץ הוא "-", הקלט הסטנדרטי נקרא.
אדון
הדפס מידע על ניפוי באגים ל-stderr.
-e ביטוי
הביטוי הנתון מוערך.
-h
עזרה
הצג הודעת עזרה וצא.
-n
אל תעריך ביטויים כלשהם, בדוק רק אם יש שגיאות תחביר.
-p
הדפס את התוצאה הסופית לפלט הסטנדרטי, אלא אם כן היא נדחקה על ידי -q or
-n. ללא דגל זה, התוצאה תצטרך להיות מופקת על ידי התוכנית.
-s
אם ביטוי בודד מוערך משורת הפקודה או קובץ ו-
תוצאת ההערכה היא מחרוזת או bstring, הפלט יהיה מוקף במירכאות
אלא אם דגל זה צוין.
-מבחן
הקלט הוא מקרה מבחן. מקרה מבחן מורכב מאפשרויות ואחריהן ביטוי.
יכולות להיות אפס או יותר אפשרויות, אחת בכל שורה, מוטמעות בתוך הערה בסגנון //:
{ רווח לבן* "//" רווח לבן* אפשרות-שם "" ערך אופציה סוף קו }*
אין רווח לבן לפני או אחרי ה-":". כמקרה מיוחד, קווים בעלי ה
מתעלמים מהפורמט הבא:
רווח לבן* "///" .* סוף שורה
השורה הראשונה ללא אופציות מסיימת את האפשרויות והיא השורה הראשונה של ה
ביטוי שיש להעריך.
הנה דוגמא:
/// בדוק תזוזות סיביות
// expect-exact:1024
1 << 10
אפשרות שולטת על אופן ביצוע הבדיקה ונותנת את התוצאה הצפויה:
לְצַפּוֹת:regex
expect-regex:regex
מחרוזת התוצאה חייבת להתאים regex. שני שמות האפשרויות הללו שווים.
צפוי-זהה:מחרוזת
מחרוזת התוצאה חייבת להתאים מחרוזת בדיוק.
מצפה-מדויק:מחרוזת
מחרוזת התוצאה חייבת להתאים מחרוזת בדיוק, חוץ מהדמות בסגנון C
קבועים (שלפניהם נטוי אחורי) ב מחרוזת אינטרפולציה.
צפוי-קוד:קוד
קוד התוצאה חייב להתאים קוד, שהוא 0 אם התוצאה היא נָכוֹן, 1 אם התוצאה
is לא נכון, ו-2 אם מתרחשת שגיאה. אם אפשרות זו לא ניתנת, קוד ברירת מחדל של
ההנחה היא 0.
מצפה-סוג:סוג
סוג התוצאה חייב להתאים סוג, שיכול להיות מספר שלם, אמיתי, מחרוזת,
bstring, literal או undef.
מצפה-דגלים:דגלים
נכון לעכשיו, הערכים המוכרים היחידים עבור דגלים הם rw_namespaces ו
ro_namespaces. הראשון מאפשר למבחן ליצור או לשנות משתנים ב-
DACS, ארגז, או בערך מרחב שמות; כברירת מחדל, מרחבי השמות הללו הם לקריאה בלבד. זֶה
עשוי להיות שימושי בעת בדיקה מ()[8], למשל, משום שהוא מאפשר את הבדיקה
כדי להגדיר ערך עבור ${DACS::REMOTE_ADDR}. התנהגות ברירת המחדל יכולה להיות במפורש
נבחר על ידי ציון ro_namespaces.
show-result:{כן | לא}
התוצאה מודפסת לפלט הסטנדרטי רק אם ערך האופציה הוא כן.
אם הבדיקה נכשלת, מודפסת הודעה תיאורית לפי השגיאה הסטנדרטית. ה
מצב היציאה של התוכנית יהיה 0 אם הבדיקה הצליחה, 1 אחרת.
דוגמה זו אמורה להצליח מבלי להציג את התוצאה:
// expect-exact:2
// צפוי-סוג: מספר שלם
/// show-result:כן
1 + 1
הערות
השמיים DACS ההפצה כוללת קבוצה של מקרי בדיקה בספריית src/tests ש
ניתן להריץ לבדיקת רגרסיה (עשה "לעשות בדיקות" מספריית src). כמה
של הפונקציות הניתנות על ידי dacs.exprs(5)[2] משמשים גם באופן פנימי על ידי DACS, כך
זה קריטי שכל הבדיקות יצליחו גם עבור פונקציות שאינן בשימוש
מרמת המשתמש.
-x
אם זה הדגל הראשון זה מצביע על כך dacsexpr מבוצע כא
סקריפט באמצעות "#!" של המערכת מַנגָנוֹן. זה עשוי להיות שימושי אם התוכנית
היוריסטיקה לקביעת זה אינה נכונה. הארגומנט האחרון חייב להיות שם קובץ.
--
טיעון זה מסמן במפורש את ארגומנט הדגל האחרון. ארגומנט שם קובץ עשוי
לעקוב אחר.
דוגמאות
הפקודה הבאה מעריכה את ארגומנט הביטוי (שים לב שזהו ארגומנט בודד
לפקודה) ומוציא את התוצאה ל-stdout:
% dacsexpr -e "1+1"
2
% dacsexpr -e '${Env::USER}'
"בובו"
% dacsexpr -u example.com -e '"FEDERATION_NAME=" . ${Conf::FEDERATION_NAME}'
"FEDERATION_NAME=דוגמה"
% dacsexpr - abc <
? print("הארג הראשון הוא \"\${Argv::1}\"")
? פה
ארגומנט ראשון הוא "א"
% חתול לשעבר
#!/usr/local/dacs/bin/dacsexpr
print("Argv[2] הוא ${Argv::2}");
% chmod 0755 ex
% ./ex foo bar baz
Argv[2] הוא בר
דיאגנוסטיקה
אם מתרחשת שגיאה, ייתכן שנכתב הודעה ל-stderr, בהתאם לרמת הרישום. ב
באופן כללי, התוכנית יוצאת מ-0 אם ורק אם הכל היה בסדר. אם שורת פקודה
הביטוי מוערך, התוכנית יוצאת מ-0 אם הביטוי מוערך ל נָכוֹן, 1 אם זה
מעריך ל לא נכון, ו-2 אם מתרחשת שגיאה. אם קריאה מפורשת ל יציאה () עשוי ולא
התרחש מצב שגיאה אמיתי, אז התוכנית תצא עם ערך הארגומנט.
השתמש ב-dacsexpr באופן מקוון באמצעות שירותי onworks.net