2010-04-27 39 views
9

Thực hành tốt hơn là viết kịch bản lệnh Bash hay tập lệnh Bourne? Nhóm của tôi viết kịch bản Bourne nhưng tôi không hoàn toàn chắc chắn tại sao.Tập lệnh Bash hoặc Bourne?

Nếu đây là câu hỏi chiến tranh thánh thiện (ví dụ: vim vs. emacs), vui lòng chỉ trả lời: chiến tranh thánh.

+5

chỉ miễn là không phải là csh –

+1

[Lập trình Csh được coi là có hại] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) –

+0

Mã lập trình thực sự ở Korn! :-P Tôi luôn thích sh so với bash, vì hầu hết các công cụ cú pháp/tính năng sẽ giống nhau hoặc ít nhất là tương thích với hành vi sh trong hầu hết các bản phân phối; trong khi bash chỉ không có sẵn trong một số trường hợp nếu bạn làm việc với AIX vv Nhưng nếu bạn đang làm việc với các kịch bản chỉ có Linux, bash là thích hợp hơn. Làm cho một imho lập trình dễ dàng hơn rất nhiều. –

Trả lời

11

Tùy thuộc vào nền tảng mục tiêu của bạn là gì.

Nếu bạn chỉ nhắm mục tiêu, phân phối Linux chính và Mac OS X, thì bạn có thể tự tin rằng các hệ thống này sẽ có sẵn bash. Trên các UNIX khác (ví dụ: AIX, Solaris, HP-UX), bash có thể không nhất thiết có mặt, vì vậy Bourne là sự lựa chọn an toàn hơn. Nếu bash có sẵn, tôi có thể nghĩ không có lý do nào bạn thích Bourne.

12

Bạn có thể chắc chắn hơn rằng trình bao Bourne sẽ được cài đặt trên bất kỳ máy tính Unix nào. Yeah, Bash có mặt khắp nơi trên Linux, nhưng cả thế giới không phải là Linux.

+0

Có phần nào đó dọc theo những dòng này, tôi chỉ có thể nghĩ đến ba lý do: tính tương thích ngược, tính di động hoặc "đó là cách chúng tôi luôn làm." –

+2

"Bash có mặt khắp nơi trên Linux, nhưng cả thế giới không phải là Linux." Đây là niềm tin của tôi trước đó, sau đó tôi bắt đầu làm việc với các máy Solaris và HP-UX. Tôi nghĩ rằng tôi có thể viết kịch bản shell trong Bash cho những máy này, oh tôi đã sai lầm như thế nào. Nhưng đó là một trải nghiệm học tập khiêm tốn, bây giờ tôi luôn sử dụng vỏ bourne và cú pháp duy nhất mà tôi biết là tuân thủ POSIX. – Anders

4

Vâng, là một vấn đề của hương vị, nhưng đối với người mới bắt đầu, bourne shell script có thể được chạy với bash, và tôi nghĩ bash có các tính năng không thể được điều hành bởi Bourne.

10

Điều quan trọng nhất là hãy nhớ rằng không phải mọi hệ điều hành softlinks/bin/sh đến/bin/bash, như một số bản phân phối Linux làm. Rất nhiều kịch bản được viết cho bash nhưng bắt đầu bằng:

#!/bin/sh 

để chúng vi phạm, ví dụ: trong Ubuntu. Vì vậy, khi bạn viết kịch bản bash, luôn viết:

#!/bin/bash 
+6

Một trong những người chăn nuôi bò của tôi đã nổi giận với Ubuntu vì họ đã sử dụng một thứ khác ngoài bash cho/bin/sh. Tôi nói với anh ta rằng anh ta nên nổi giận với những kẻ ngốc đã dán nhãn các tập lệnh bash của họ làm kịch bản sh, nhưng anh ta sẽ không đồng ý với tôi. –

+1

Không, bạn luôn phải viết '#!/Usr/bin/env bash'. Bash có thể được cài đặt tại/bin/bash trên máy của bạn, nhưng không được chuẩn hóa và không phổ dụng. Tuy nhiên, nếu bạn gắn bó với '#!/Bin/sh', có thể bạn sẽ ổn. –

0

Tôi muốn dùng lại vỏ bourne, vì vỏ bourne có thể hơi khác nhau giữa các lần triển khai unix. Với bash bạn có thể chắc chắn rằng bash luôn là bash.

+0

Tôi sẽ không nói rằng các shell khác nhau hoạt động khác nhau. Bất kỳ shell nào mà tôi biết sẽ rơi trở lại hành vi shell bourne nếu nó được bắt đầu như 'sh' – soulmerge

+0

Tôi đã thấy các triển khai shell khác nhau (sh) hoạt động khác nhau. Có lẽ đây không phải là trường hợp nữa. – topskip

+2

"Với bash bạn có thể chắc chắn rằng bash luôn luôn là bash". Trừ khi đó là một phiên bản khác của Bash. Rõ ràng có sự khác biệt đáng kể giữa các số phiên bản chính, nhưng cũng có một số giữa các số phiên bản nhỏ. –

1

Tính di động. Tôi viết #!/bin/sh trừ khi mọi thứ trở nên đau đớn, và sau đó tôi viết #!/bin/bash. Thế giới đang thay đổi rất nhanh chóng, và tôi cá cược rằng trong tương lai nó sẽ dễ dàng thuyết phục sysadmins cài đặt bash. Nhưng tôi đặt cược tiền cược bằng cách sử dụng Bourne cho hầu hết mọi thứ, điều này thật đơn giản.

1

Trên Mac OS X/bin/sh KHÔNG phải là trình bao Bourne. (Nhưng bạn có thể nhận được một bournesh thực sự hơn tại freshmeat).

Để xác định vỏ Bourne truyền thống, bạn có thể thử sử dụng dấu mũ (dấu mũ) làm thay thế cho | (ống).

Xem:

Các truyền thống Bourne Shell Gia đình,

http://www.in-ulm.de/~mascheck/bourne/

1

tôi sử dụng Bash như vỏ đăng nhập của tôi, nhưng đối với kịch bản tôi muốn chọn Bourne shell bất kỳ ngày nào trong tuần và hai lần vào ngày Chủ nhật. Bash có các tính năng tốt hơn, thân thiện với người dùng tốt hơn và các lỗi tốt hơn.

Thực ra, những thứ tương tự khiến tôi chọn Bash khi tôi đăng nhập, làm cho tôi tránh được khi viết kịch bản. Bash cố gắng làm mọi thứ tốt đẹp và ấm cúng cho người dùng, nhưng với chi phí 776   kB thực thi (trên máy của tôi), so với 140   kB đối với Bourne shell. Tại sao kịch bản của tôi quan tâm đến sự thân thiện với người dùng? Bất kỳ đạt được tôi có thể đạt được thông qua việc sử dụng một số chức năng Bash thông minh có hiệu quả bị hủy bỏ bởi dấu chân vỏ, đó là lớn hơn năm lần.

Tôi có máy tính chạy Linux, FreeBSD và OS X. Mặc dù tôi hiếm khi di chuyển bất kỳ thứ gì giữa các máy tính, nhưng thật tuyệt khi có khả năng. Trong tập lệnh hệ vỏ Bourne, bạn chỉ cần nhập

#!/bin/sh 

và nó chỉ hoạt động. Luôn luôn. Bash có thể là phổ biến trên Linux, nhưng nó không được chuẩn hóa như vỏ Bourne. Trên FreeBSD, Bash không được cài đặt theo mặc định. Nó có thể được cài đặt từ Ports nếu sysadmin nghĩ rằng đó là một ý tưởng tốt nhưng, ngay cả sau đó, nó kết thúc trong /usr/local/bin/bash (không phải /bin/bash). Do đó, nếu bạn vẫn quyết định đi cùng Bash, bạn nên viết

#!/usr/bin/env bash 

để tạo tập lệnh di động. env sẽ tìm thấy trình bao cho bạn, bất kể hương vị Unix của bạn (miễn là nó được cài đặt).

Vào cuối ngày, đó là lựa chọn của bạn. Chỉ cần đảm bảo rằng tập lệnh của bạn thực sự tuân thủ tuân thủ đối với trình bao mà bạn chọn và không dựa vào "sh" đang được liên kết tượng trưng thành "bash" hoặc tương tự.

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