thêm sh làm gì?


10

Tôi thực sự mới sử dụng thiết bị đầu cuối và tôi đã theo dõi hướng dẫn một cách mù quáng mà không biết tại sao nó lại ở đó và nó làm gì .. mặc dù hướng dẫn này giúp tôi cài đặt trình phát vmware.

cái này hoạt động với tôi kể từ khi làm cho tập tin thực thi, nhấp vào tập tin và chạy..chỉ cần nói quyền truy cập root là cần thiết.

sudo sh vmwareplayer.txt (đổi tên thành ngắn hơn)

Bằng cách nào đó tôi biết những gì sudolàm nhưng những gì shlàm? Không có nó, nó sẽ không tìm thấy "vmwareplayer.txt". Và đối với các tệp bó tại sao nó kết thúc bằng .txt?


Đó là một thông dịch viên ngôn ngữ
Tachyons

@Tachyons Nếu bạn biết câu trả lời cho câu hỏi, hãy giải thích chi tiết hơn và đăng nó dưới dạng câu trả lời! :)
Alvar

Xem thêm một liên quan câu hỏi với câu trả lời giải thích một cách sâu sắc về các thông dịch viên (như sh, bash) và shebangs vv

1
@Mik Đây không phải là một bản sao của câu hỏi đó. Đây là hỏi những gì shlàm trong một lệnh mà gọi một kịch bản. Câu hỏi đó là về cách thức #!hoạt động bên trong tệp tập lệnh . Hoàn toàn khác biệt.
Eliah Kagan

@EliahKagan Vâng, tôi có lẽ đã quá vội vàng khi trích dẫn nó như một bản sao: Đáng lẽ tôi nên đặt 'liên quan, nhưng không trùng lặp' khi đề cập đến câu trả lời khác. Bạn đúng như thường lệ; nếu bạn muốn yêu cầu người điều hành mở lại thì không sao. Tôi đã bỏ phiếu để mở lại.

Câu trả lời:


15

sh là viết tắt của "shell" và shell là trình thông dịch dòng lệnh cũ, giống như Unix. Trình thông dịch là một chương trình thực hiện các hướng dẫn cụ thể được viết bằng ngôn ngữ lập trình hoặc tập lệnh. Vì vậy, về cơ bản, bạn nói "Thực thi tập tin đó cho tôi".

Bạn phải hiểu rằng Linux không thực sự nhìn vào phần mở rộng tệp để xác định tệp (hoặc chương trình) là gì. Vì vậy, miễn là nội dung của tệp đó được viết theo cách mà trình thông dịch sh hiểu, nó sẽ hoạt động. Nhưng chỉ để dễ đọc, các tệp như vậy thường được cung cấp một phần mở rộng .sh và tôi không biết nhà phát triển đã nghĩ gì khi anh ta cho tệp đó một phần mở rộng .txt ..


5

Trong Ubuntu, shhoặc /bin/shchỉ trỏ tới dash. shđược cho là chạy trình thông dịch lệnh mặc định, dashdành cho Ubuntu. 1 dash đề cập đến vỏ Debian Almquist.

Một shell là một trình thông dịch dòng lệnh cho hệ thống. Có rất nhiều tiện ích khác như bash, csh, zshvv Đây là một đoạn trích ngắn từ trang người đàn ông của dash:

 The shell is a command that reads lines from either a file or the termi‐
 nal, interprets them, and generally executes other commands.  It is the
 program that is running when a user logs into the system (although a user
 can select a different shell with the chsh(1) command).  The shell imple‐
 ments a language that has flow control constructs, a macro facility that
 provides a variety of features in addition to data storage, along with
 built in history and line editing capabilities.  It incorporates many
 features to aid interactive use and has the advantage that the interpre‐
 tative language is common to both interactive and non-interactive use
 (shell scripts).  That is, commands can be typed directly to the running
 shell or can be put into a file and the file can be executed directly by
 the shell.

Có rất nhiều hướng dẫn về shell Linux, bạn có thể bắt đầu với Bài viết Wikipedia này .

Đến với câu hỏi của bạn, nếu bạn viết sh file, dashthực thi filecho bạn.


Đó là một lời giải thích tốt về sh là gì, nhưng không phải là những gì nó làm trong câu hỏi cụ thể ở trên.
NilsB

Đã thêm một số thông tin, nó sẽ đủ ngay bây giờ
đốt cháy ngày

1

Chỉ cần một lời bình luận:

sudothực thi một lệnh với các rootđặc quyền. Khi bạn gọi sudo vmwareplayer.txtcó nghĩa rõ ràng là "chạy lệnh vmwareplayer.txt với quyền truy cập root" và không thành công, vì không có chương trình như vậy.

sudo sh commandcó nghĩa là "thực thi sh commandvới quyền root"

sh commandsẽ thực thi một lệnh dưới vỏ Bourne.

Câu hỏi mới phát sinh. Vỏ ốc là gì? Đây là một câu hỏi dài hơn và bạn sẽ tìm thấy một số thông tin trên wiki tôi cho rằng.

Trong khi đó, hãy nhớ manlà người bạn tốt nhất của bạn.


1

Tôi tin rằng không ai trong số những người trả lời trước đó trả lời câu hỏi mà bạn thực sự đã hỏi G., vì vậy tôi sẽ thực hiện nó. Can thiệp shkhi thực hiện một chương trình như bạn đã đề cập, thực thi chương trình trong một mạng con không tương tác . Các shell không tương tác hoạt động khác nhau (ví dụ: khởi tạo ) từ shell tương tác tiêu chuẩn bạn đang sử dụng khi bạn chạy chương trình.

Thành thật mà nói tôi không biết tác dụng thực tế này có tác dụng gì. Như bạn nhận thấy sh vmwareplayer.txtlà (thường) có thể thực thi một cái gì đó trong cùng một thư mục, trong đó chỉ cần gõ vmwareplayer.txt(thường) sẽ không. Điều đó phải làm môi trường vỏ; nó không phải là bất kỳ chất lượng có nguồn gốc từ vỏ hoặc vỏ chính nó. Tất nhiên bạn có thể thực hiện trực tiếp một chương trình trong thư mục hiện tại là root : sudo ./vmwareplayer.txt. Theo kinh nghiệm của tôi, điều này luôn luôn hoạt động tốt như sudo sh vmwareplayer.txt. Tôi đã hy vọng ai đó sẽ đi cùng và giải thích lý do tại sao subshell đôi khi được mong muốn.


0

Các shtiện ích là một thông dịch viên ngôn ngữ lệnh / một lệnh thực thi lệnh đọc từ một chuỗi dòng lệnh, đầu vào tiêu chuẩn, hoặc một tập tin cụ thể. Ứng dụng đảm bảo rằng các lệnh được thực thi được thể hiện bằng ngôn ngữ được mô tả trong Shell Command Language.

Ví dụ:

Sau đây thực thi một lệnh shell từ một chuỗi: sh -c "cat myfile.txt" tức là thực thi lệnh--cat myfile.txt

Tham khảo liên kết sau để được giải thích sâu hơn: http://pub.opengroup.org/onlinepub/009695399/utilities/sh.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.