2015-02-22 13 views
7

यह सत्यापित करने के लिए कि मैं POSIX अनुपालन करता हूं, मैं एक शैल स्क्रिप्ट का परीक्षण कैसे कर सकता हूं? मेरे पास बैश के विभिन्न संस्करणों और संभवतः अन्य गोले के लिए लिखी गई स्क्रिप्ट का एक बड़ा सेट है। मैं यह निर्धारित करने में सक्षम होना चाहता हूं कि पूरी तरह से POSIX अनुपालन कौन सा है और जो नहीं हैं। आदर्श रूप से, मैं lint जैसे कुछ खोलना चाहता हूं लेकिन शैल स्क्रिप्ट के लिए।POSIX खोल अनुपालन के लिए परीक्षण?

+1

हालांकि यह पूर्ण POSIX अनुपालन के लिए परीक्षण करने का कोई दावा नहीं करता है, लेकिन इन पंक्तियों के साथ एक सामान्य रूप से उपयोग की जाने वाली स्क्रिप्ट ['checkbashisms'] (http://sourceforge.net/projects/checkbaskisms/) है। यह गैर पोर्टेबल वाक्यविन्यास पर परीक्षण और रिपोर्ट करता है। – John1024

+1

डिफ़ॉल्ट रूप से #!/Bin/ksh का उपयोग करें, ताकि आप उन चीजों से बच सकें जो बाश में आसान हैं। यह केवल एक शुरुआत है, आपको लिनक्स सुधारों को भी छोड़ना चाहिए जैसे 'sed -i' –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/3668665/is-there-a-static-analysis-tool-like-lint- या-perlcritic-for-shell-scripts –

उत्तर

2

स्थाई रूप से यह सत्यापित करना संभव नहीं है कि कोई स्क्रिप्ट POSIX अनुपालन है क्योंकि मतभेद वाक्यविन्यास परिवर्तनों तक सीमित नहीं हैं और कुछ मतभेद कुछ आदेशों के व्यवहार को आसानी से बदलते हैं। यह link बैश और पॉज़िक्स मानक के बीच अंतर का वर्णन करता है।

हालांकि, आप bash --posix ./your_script.sh के साथ चल रहे अपनी स्क्रिप्ट को स्पष्ट रूप से देख सकते हैं या set -o posix का उपयोग कर सकते हैं।

+0

दुर्भाग्यवश POSIX अनुपालन मोड नहीं है। Https://tiswww.case.edu/php/chet/bash/POSIX और आपके द्वारा पोस्ट किए गए यूआरएल के अंत देखें। कम से कम, आपको POSIX अनुपालन "गूंज" व्यवहार प्राप्त करने के लिए 'xpg_echo' विकल्प को सक्षम करने की भी आवश्यकता है। अन्य चीजें भी हैं। मैं पॉज़िक्स अनुपालन परीक्षण के लिए डैश का उपयोग करने का सुझाव देता हूं। –

संबंधित मुद्दे