2016-06-28 8 views
11

बहुत सरल, ओएस को समझने के लिए सामान्य स्थान विंडोज़ के लिए उबंटू पर सादे उबंटू के समान दिखते हैं। उदाहरण के लिए uname -a मूल जीएनयू/लिनक्स इंस्टॉल के समान है और /etc/os-version उबंटू ट्रस्टी ताहर इंस्टॉल के समान है।विंडोज़ पर उबंटू पर बैश में कोई प्रोग्राम चलाने के लिए और केवल सादे उबंटू नहीं, यह जांचने के लिए कैसे करें?

केवल एक चीज जिसे मैं सोच सकता हूं यह जांचना है कि /mnt/c/Windows मौजूद है, लेकिन मुझे यकीन नहीं है कि यह मूर्खतापूर्ण विचार है या नहीं।

उत्तर

5

मैं भी इसका पता लगाने के तरीकों की तलाश में हूं। अब तक मैंने पाया 2.

  • /proc/sys/kernel/osrelease कि "3.4.0-माइक्रोसॉफ्ट"

  • /proc/version "है लिनक्स संस्करण 3.4.0-माइक्रोसॉफ्ट ([email protected]) (जीसीसी संस्करण 4.7 (जीसीसी)) # 1 SMP की जगह ले लेना बुध दिसंबर 31 14:42:53 पीएसटी 2014 "

तुम सिर्फ Ubuntu वितरण डिफ़ॉल्ट रूप से स्थापित का उपयोग करते हैं वहाँ उन्हें प्रयोग, they said that it would be unlikely for them to set either to something that doesn't contain "Microsoft" or "WSL" के रूप में के साथ कोई समस्या नहीं होनी चाहिए।

हालांकि, यदि आप एक अलग लिनक्स वितरण स्थापित करना चाहते हैं, तो मुझे पूरा यकीन है कि /proc/sys/kernel/osrelease और /proc/version की सामग्री बदलेगी, क्योंकि माइक्रोसॉफ्ट द्वारा डिस्ट्रो को संकलित नहीं किया गया था।

+0

क्योंकि procfs विंडोज ने अपनाया है, यह (सिद्धांत रूप में, के रूप में Github टिप्पणी पर कहा गया) हमेशा उन माइक्रोसॉफ्ट तार, इसलिए अंतिम अनुच्छेद मेरे लिए उलझन में लगता है को शामिल करना चाहिए, इस्तेमाल किया वितरण की परवाह किए बिना। –

+1

@ गुइलमजोवर, यह इस बात पर निर्भर करता है कि काल्पनिक अन्य वितरण डब्लूएसएल का उपयोग कर रहा है या नहीं, मुझे लगता है। मुझे नहीं पता कि सिगविन उस कार्यक्षमता को अनुकरण करता है, लेकिन अगर ऐसा होता है, तो मुझे कल्पना नहीं है कि यह माइक्रोसॉफ्ट कहेंगे। (हालांकि मुझे लगता है कि वाक्यांश "माइक्रोसॉफ्ट विंडोज" स्ट्रिंग में दिखाई दे सकता है। मैं शर्त लगाता हूं कि "माइक्रोसॉफ्ट @ माइक्रोसॉफ्ट डॉट कॉम" नहीं होगा!) –

+0

@ हैरी जोहानस्टन सिगविन के तहत, '/ proc/version' में "CYGWIN_NT" से शुरू होने वाली स्ट्रिंग है , और '/ proc/sys/kernel/osrelease' बिल्कुल मौजूद नहीं है। – duskwuff

10

Windows 10, MacOS, और लिनक्स पर बैश में निम्नलिखित काम करता है:

:

#!/bin/bash 
set -e 
if grep -qE "(Microsoft|WSL)" /proc/version &> /dev/null ; then 
    echo "Windows 10 Bash" 
else 
    echo "Anything else" 
fi 

आप दोनों "माइक्रोसॉफ्ट" और this comment प्रति बेन Hillis, WSL डेवलपर द्वारा "WSL" के लिए जांच करने की आवश्यकता

समय के लिए यह संभवतः ऐसा करने का सबसे अच्छा तरीका है। मैं वादा नहीं कर सकता कि हम इन प्रक्रियाओं की फ़ाइलों को कभी भी नहीं बदलेंगे, लेकिन मुझे लगता है कि यह असंभव है कि हम इसे किसी ऐसे चीज़ में बदल देंगे जो में "माइक्रोसॉफ्ट" या "डब्लूएसएल" नहीं है।

/proc/sys/kernel/osrelease 
/proc/version 
1

मैं सिर्फ इस के साथ मेरी .bashrc के लिए $ पथ के लिए कुछ WSL आइटम जोड़ने के लिए आया था।

1703 में काम करता है। सुनिश्चित नहीं है कि पिछले संस्करण हैं या नहीं।

if [[ $(uname -r) =~ Microsoft$ ]]; then 
    foo 
fi 
संबंधित मुद्दे