2016-08-05 16 views
7

Tôi đang tạo một tập lệnh bash. Bashrc tùy chỉnh của tôi, chính xác hơn. Và tôi cần phải có cấu hình riêng biệt, tùy thuộc vào những gì "Linux" tôi đang ở (hệ điều hành Linux Windows 10 hoặc Linux thực tế).Cách phân biệt Linux khỏi Windows 10 bash khi tạo các tập lệnh bash

Tôi làm cách nào để phân biệt chúng?

Những điều tôi đã cố gắng:

  1. $OSTYPE - cả hai trở linux-gnu
  2. uname -a - cả hai trở lại tương tự Linux COMPUTER_NAME_HERE 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
  3. lsb_release -a - cả hai trở ubuntu xx.xx
  4. cat /etc/issue.net - cả hai trở Ubuntu 14.04.4 LTS
  5. ld -v - cả trở về GNU ld (GNU Binutils for Ubuntu) 2.24

Cách duy nhất tôi đã tìm thấy để làm cho công việc này là để thiết lập một số tên người dùng cụ cho Windows tiểu hệ thống, và sử dụng $USER, nhưng đó không phải là một lựa chọn Tôi sẵn sàng để sử dụng. Tôi cần điều này để làm việc ra khỏi hộp, mà không có tên người dùng tùy chỉnh, biến môi trường, v.v.

+0

Hmm, hệ thống phụ Linux này dành cho Windows 10 là gì? Làm thế nào để cài đặt nó? Dù sao tôi nghĩ rằng bất kỳ bash Windows nhận ra đường dẫn kiểu Windows có ký tự ổ đĩa trong chúng, vì vậy hãy kiểm tra xem 'c: /' tồn tại, và './c: /' không. –

+0

@ n.m. Một cái gì đó của nó, giống như hệ thống Linux dưới cửa sổ .. Không giống như lang thang hoặc những người khác (nơi u khởi động Linux như hệ thống ảo), nhưng thay vào đó, lệnh linux, dịchto cửa sổ (ở cấp độ hạt nhân). Không thể giải thích thêm, vì tôi chỉ đang học về nó bản thân mình .. Chỉ cần google "ubuntu cho windows" và u'll tìm thấy nó. Tôi phải nói, tôi khá thoát khỏi điều này, như tôi yêu cửa sổ, nhưng nó khó sử dụng nó như là hệ điều hành phát triển .. (Đặc biệt là cho RubyOnRails) – PragmaticEd

+0

Ah vì vậy nó giống như rượu theo một hướng khác. Khéo léo! –

Trả lời

5

Xem /proc/sys/kernel/osrelease

Bạn có thể kiểm tra cho Windows với grep -qi Microsoft /proc/sys/kernel/osrelease 2> /dev/null

+0

Tôi không tích cực về mặt kỹ thuật vì tôi không có cửa sổ bash, nhưng đây sẽ là giải pháp tốt hơn nhiều so với phiên bản được chấp nhận nếu nó đúng bởi vì bạn đang kiểm tra thứ gì đó không mơ hồ. Có lẽ cũng là một/sys so sánh/nội dung là tốt, mặc dù Linux cũ có thể không có/sys hoặc có nó không đầy đủ, nhưng đối với các trận đấu tích cực, đó sẽ không quan trọng. Tôi có xu hướng thích đi trực tiếp vào/sys hơn là sử dụng/proc nếu có thể. – Lizardx

+0

Đây là cách tốt hơn nhiều, vì cửa sổ bash trả về '3.4.0-Microsoft' Cảm ơn – PragmaticEd

4

Okey, tôi tìm thấy câu trả lời. Tôi có thể sử dụng thư mục kiểm tra /mtn/c/Users, đó sẽ là chỉ trong cửa sổ linux tiểu hệ thống, như vậy:

if [ -d "/mnt/c/Users" ]; then 
    echo "this is windows 10 bash" 
fi 

Vì vậy, mã kết thúc của tôi trông như thế này, trong trường hợp ai đó cần điều này:

# get "OS type" 
# * linux 
# * linux_vagrant 
# * windows_bash 
# * windows_git 
# ------------------------------------------- 
if [ $OSTYPE=="msys" ]; then 
    MY_BASH_OS="windows_git" 
elif [[ $OSTYPE=="linux-gnu" || -d "/mnt/c/Users" ]]; then 
    MY_BASH_OS="windows_bash" 
elif [[ $OSTYPE=="linux-gnu" || $USER=="vagrant" ]]; then 
    MY_BASH_OS="linux_vagrant" 
elif [ $OSTYPE=="linux-gnu" ]; then 
    MY_BASH_OS="linux" 
else 
    echo "NO OS DETECTED. Exiting my_bash" 
    return 
fi 

CẬP NHẬT: laktak Đã có giải pháp tốt hơn, nghĩa là, kiểm tra /proc/sys/kernel/osrelease, là 3.4.0-Microsoft cho cửa sổ bash.

+0

Đó là một lý thuyết hợp lý, nhưng ai đó có thể có một đĩa Windows được gắn kết là '/ mnt/c' trong một môi trường không phải là Windows. – tripleee

+1

@tripleee Điểm công bằng. Nhưng đây là giải pháp tốt nhất tôi có thể đưa ra .. Bạn có giải pháp nào tốt hơn không? – PragmaticEd

+0

@PragmaticEd Bạn Sir, xứng đáng với một cookie. Kiến thức về W10 bash của tôi bị hạn chế, nhưng tôi có thể đề xuất tìm phần mềm đã cài đặt hoặc ENV var chỉ có trong linux chứ không phải trên W10 không? –

Các vấn đề liên quan