रेड्यूएक्स: लिनक्स बनाम केश के बीच असंगतता को कैसे दूर किया जाए जो एईक्स/सोलारिस/एचपीयूएक्स पर स्थापित है?

मैंने इस प्रयास में एक और समस्या उजागर की है कि हम एईक्स, सोलारिस और एचपीयूएक्स से लिनक्स तक कई सैकड़ों केएसएच स्क्रिप्ट को बंद कर रहे हैं। यहां </देखें ए> पिछली समस्या के लिए।

यह कोड:

#!/bin/ksh
if [ -a k* ]; then
    echo "Oh yeah!"
else
    echo "No way!"
fi
exit 0

(when run in a directory with several files whose name starts with k) produces "Oh yeah!" when called with the AT&T ksh variants (ksh88 and ksh93). On the other hand it produces and error message followed by "No way!" on the other ksh variants (pdksh, MKS ksh and bash).

फिर, मेरा सवाल है:

  • क्या कोई पर्यावरण चर है जो pdksh को ksh93 की तरह व्यवहार करने का कारण बनता है? यह विफल हो रहा है:
  • क्या आवश्यक व्यवहार प्राप्त करने के लिए पीडीकेश पर कोई विकल्प है?

0

4 उत्तर

ठीक है एक साल बाद मेरी समस्या का कोई समाधान नहीं है।

मैं यह जवाब कह रहा हूं कि मुझे इसके साथ रहना होगा ......

0
जोड़ा

आपको एहसास है कि [/usr/bin/test के लिए एक उपनाम (अक्सर एक लिंक, प्रतीकात्मक या कठिन) है, है ना? तो शायद वास्तविक समस्या /usr/bin/test के विभिन्न संस्करण हैं?

ओटीओएच, केश इसे एक बिल्टिन के साथ ओवरराइड करता है। शायद ऐसा करने के लिए इसे पाने का कोई तरीका नहीं है? या हो सकता है कि आप स्पष्ट रूप से उपनाम [से /usr/bin/test कर सकते हैं, यदि सभी प्लेटफ़ॉर्म पर /usr/bin/test संगत है?

0
जोड़ा
[ksh93 और pdksh दोनों में एक अंतर्निहित कमांड है ..
जोड़ा लेखक Andrew Stein, स्रोत

I wouldn't use pdksh on Linux anymore. Since AT&T ksh has become OpenSource there are packages available from the various Linux distributions. E.g. RedHat Enterprise Linux and CentOS include ksh93 as the "ksh" RPM package.

सॉफ्टवेयर विक्रेताओं से कई स्थापना आवश्यकता दस्तावेज में पीडीकेश का अभी भी उल्लेख है। हमने अपने सभी लिनक्स सिस्टम पर pdksh को ksh93 के साथ बदल दिया है, अब तक कोई समस्या नहीं है।

0
जोड़ा

बैश में परीक्षण-एक ऑपरेशन एक फ़ाइल के लिए है।

मैं अनुमान लगा रहा हूं कि Ksh88 में test -a ऑपरेशन एक फ़ाइल के लिए है, लेकिन शिकायत नहीं करता है क्योंकि अन्य टेस्ट शब्द ए-ए के लिए अनिर्दिष्ट स्थिति हैं।

आप कुछ पसंद करना चाहते हैं

for K in /etc/rc2.d/K* ; do test -a $K && echo heck-yea ; done

मैं कह सकता हूं कि ksh93 इस संबंध में बैश की तरह काम करता है। अफसोस की बात है कि मुझे लगता है कि कोड खराब लिखा गया था, मेरी राय, और संभावित रूप से खराब राय क्योंकि समस्या का मूल कारण ksh88 अंतर्निहित परीक्षण है जो मैला कोड के लिए अनुमति देता है।

0
जोड़ा