2009-06-01 31 views
27

Tôi sử dụng bash, và đã làm như vậy trong hơn một thập kỷ - nhưng đôi khi tôi tự hỏi liệu có bất kỳ sự phát triển mới đáng kể nào trong thế giới vỏ Linux.Vỏ Linux tốt hơn?

Một vài năm trước Microsoft phát hành PowerShell, điều này có vẻ rất thú vị. Có bất kỳ sự đổi mới có thể so sánh nào xảy ra trong các vỏ Linux không?

+9

Các tính năng nào bạn bỏ lỡ trong bash vs có sẵn trong các hệ vỏ khác mà bạn cho là sáng tạo? Quan trọng hơn là bạn có thấy các tính năng mà bạn nghĩ sẽ giúp bash để làm những gì nó được viết cho? Ví dụ. từ quan điểm của tôi bash là một giao diện dòng lệnh để truy cập tài nguyên hệ điều hành, từ quan điểm đó bạn đang thiếu chức năng nào? – stefanB

+0

Có lẽ nó là một cách để ở trong triết lý Unix của việc sử dụng các công cụ nhỏ mà làm những điều cụ thể rất tốt (như trái ngược với các công cụ lớn mà làm mọi thứ kém). –

+2

đây là một loại giun .. mở nó cẩn thận .. – sybreon

Trả lời

6

Bạn có thể chạy PowerShell trên Linux qua Pash. Nó sử dụng Mono theo cách PowerShell sử dụng .NET.

8

Tôi sẽ xem xét zsh hoặc vỏ sò.

+0

Một sự cân nhắc về zsh và fishshell là chúng tôi không được phép sử dụng tại nơi làm việc. Và tôi dường như không đơn độc. Vì vậy, mặc dù họ là tốt đẹp, họ không phải là có giá trị như bash tại nơi làm việc, trừ khi bạn có thể chọn cho chính mình. –

+5

Có vẻ như thay đổi vỏ sẽ dễ dàng. Bạn không cần phải có nó như vỏ đăng nhập, bạn chỉ có thể chạy nó khi bạn đã đăng nhập. – stimms

6

Tôi nghĩ rằng "vỏ được cải thiện ban đầu" là ksh93. bash xuất hiện vào thời điểm khi mã nguồn ksh là độc quyền; nếu ksh đã là mã nguồn mở thì có thể không được coi là cần thiết để có một trình bao mới (mặc dù với FSF mà bạn không bao giờ biết). ksh đáng để nghiên cứu, đặc biệt là khả năng mở rộng thông qua các mô-đun C, nhưng nó không phải là một thắng lợi rõ ràng đối với bash. Tự động hoàn thành của bash rõ ràng vượt trội, có thể đủ để làm cho bash giành chiến thắng tổng thể. Trong mọi trường hợp, bash và ksh đã nỗ lực đáng kể để hội tụ, vì vậy sự khác biệt là rất nhỏ.

Vỏ thú vị khác là zsh, cố gắng trở thành mọi thứ mà ksh trong khi cũng bao gồm csh. Vì tôi chưa bao giờ thấy bất kỳ điểm nào hoặc sử dụng csh, tôi không phải là người thích hợp để biện hộ cho zsh. Tôi sẽ chỉ ra một sự không tương thích bất thường: theo mặc định, trong zsh một biến $varluôn luôn mở rộng thành một mã thông báo duy nhất, ngay cả khi nó chứa dấu cách. Hành vi này không tương thích với tất cả các shell có nguồn gốc từ sh khác, và đôi khi nó bất tiện, nhưng thực sự nó có ý nghĩa hơn nhiều so với bản gốc, và nó tiết kiệm rất nhiều trích dẫn.

csh là hệ vỏ đầu tiên có kiểm soát công việc, nhưng trong tâm trí của tôi nó (và những người kế thừa) đã bị thay thế bởi bash và ksh. Nó không bao giờ thú vị khi viết kịch bản.

Cuối cùng, có rất nhiều vỏ nhỏ được thiết kế cho các đĩa mềm cứu hộ (!) Và các môi trường Spartan khác, nhưng có vẻ như bạn không quan tâm đến chúng.

(Trong vấn đề đổi mới, tôi nên thêm rằng hơn một nửa tập lệnh mà tôi đã sử dụng để viết dưới dạng tập lệnh shell hiện là Lua tập lệnh. Những người khác có thể nói tương tự cho Python hoặc Ruby hoặc ngược lại trong ngày, Perl hoặc Vì vậy, tôi nghĩ rằng sự đổi mới thực sự là di chuyển ra khỏi vỏ cho tương tác lập trình tại dòng lệnh.)

+1

ksh (hoặc pdksh) rất dễ hack, trên thực tế bạn có thể liên kết nó với cùng một trình soạn thảo dòng và thư viện tự động hoàn thành mà bash sử dụng. Những gì bạn sẽ không nhận được là tất cả các phần mở rộng của GNU ngoài POSIX (tức là các mảng kết hợp trong bash 4.0). Với bất kỳ trình bao nào, dễ dàng chuyển đổi phân tích cú pháp/ngữ pháp để sử dụng một ngôn ngữ hiện đại trên dòng lệnh. Nếu bạn google "ngôn ngữ lập trình màu xanh", bạn sẽ thấy dễ dàng rơi vào bash. –

3

IIRC, Powershell là hướng đối tượng, trong khi hầu hết các shell và tiện ích hoạt động trên văn bản. Về vấn đề đó, Squirrel Shell có thể bạn quan tâm. Tôi chưa từng sử dụng nó.

20

Bạn nhận ra rằng bash 4 đã được phát hành gần đây với một loạt các tính năng mới và bổ sung ngôn ngữ?

  • Shell tùy chọn globstar (**/foo) thực hiện một tìm kiếm đệ quy, dirspell sửa lỗi chính tả trong việc mở rộng tên đường dẫn.
  • Các mảng kết hợp, chuỗi bản đồ thành chuỗi, thay vì chỉ là số tới chuỗi.
  • Tùy chọn vỏ autocd cho phép thay đổi thư mục bằng cách chỉ cần nhập đường dẫn thư mục thay vì phải đặt cd ở phía trước.
  • Coprocesses
  • &>>|& nhà khai thác chuyển hướng mà chuyển hướng cả stdoutstderr
  • tải của bổ sung vào builtins hiện để cải thiện tiện kịch bản.

Check-out:

3

Nếu bạn ’ lại sẵn sàng mất khả năng tương thích sh, bạn có thể xem bằng cách sử dụng ngôn ngữ kịch bản như Python hoặc Tcl làm vỏ của bạn. rlwrap có thể rất tiện dụng nếu trình thông dịch không cung cấp chỉnh sửa dòng, lịch sử lệnh, hoàn thành, v.v.

Một triết lý liên quan đến vỏ là chúng chỉ được sử dụng để kết nối các quy trình với tệp (here is one page that espouses that approach). Điều đó nói rằng, mọi người đã viết một số phần mềm phức tạp đáng kể bằng cách sử dụng chúng.

7

Một trong những tính năng ít được chào hàng nhất của Bash (và một vài trình bao khác) là khả năng viết các tệp tải của riêng bạn và để trình bao chạy chúng dưới dạng nội trang dựng sẵn.

phép nói rằng bạn viết có thể nạp được 'bật' .. và bạn muốn nó hoạt động như thế này:

on node 123 run some command 
on class nodes run some command 
on all nodes run some command 

... vv ..

Bạn có thể làm theo tấm gương đơn giản về cách viết một nạp, sau đó kích hoạt nó như là một bash xây dựng trong qua phép -f/path/to/loadable loadable_name

vì vậy, trong trường hợp của chúng tôi, cho phép -f/opt/bash/loadables/vào trên

... trong bashrc của bạn và bạn đã có nó. Vì vậy, nếu bạn muốn bash giải thích ngôn ngữ mới của bạn một cách tự nhiên, bạn sẽ viết một tên có thể nạp được 'sử dụng' hoặc 'switch_to', sau đó sửa đổi trình phân tích cú pháp để tải ngữ pháp/thời gian chạy khác nhau nếu một biến môi trường nhất định là bộ.

tức là .:

#/bin/bash 

switch_to my-way-cool-language 

funkyfunc Zippy(int p) [[ 
    jive.wassup(p) ]] 

Hầu hết mọi người là không sẽ muốn hack vỏ của họ, tuy nhiên. Tôi đã muốn chỉ ra rằng các cơ sở tồn tại để chiếm lấy Bash và biến nó theo cách bạn muốn, mà không phải lo lắng quá nhiều với mã lõi.

Xem/đường dẫn đến nguồn bash/ví dụ/loadables, bạn có thể có được điều đó để bay nơi bạn làm việc, vì bạn vẫn đang sử dụng Bash.

+2

Một ví dụ điển hình về sức mạnh của điều này là René Rebe's [Lua Bash] (http://freshmeat.net/projects/luabash/), là một tải có thể định nghĩa một 'luabash' dựng sẵn thực thi Lua và một số cơ sở hạ tầng cho thêm các nội trang khác, & c. [Ví dụ] (http://svn.exactcode.de/t2/trunk/misc/luabash/example/example.sh) cung cấp cho một số ý tưởng về những gì đang xảy ra. –

+0

@Charles - Đó thực sự là một ví dụ tuyệt vời! –

2

Vỏ không đến nhiều hơn inovative hơn Scheme Schell. Tất cả sức mạnh của Đề án kết hợp với khả năng chạy các lệnh Unix một trình thông dịch được nhúng sẵn (được viết trong Đề án, tất nhiên). Hạn chế duy nhất là nó cần một chút nhỏ của patching để xây dựng trên Linux 64 bit.

Nó không chính xác Bourne-shell, nhưng nó khác nhau. Tất nhiên, bạn phải học Scheme - tiền thưởng!