Nhiều shebang trong một tệp bash


8

Tôi có một đoạn script từ người khác có giao diện (lưu ý: đó là một tệp duy nhất):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Tôi tự hỏi mục đích của shebang thứ hai và thứ ba là gì? Là do nhầm lẫn hay cố ý?


Là các ngoại lai #!/bin/bashđược <<xây dựng trước (tài liệu ở đây) là : some command <<end_of_script_flag?
dan

Không có bất kỳ <<cấu trúc. Chỉ cần shebang đơn giản và một số lệnh xóa (đây là gỡ cài đặt tập lệnh)
Barat Sahdzijeu

Có thể là tập lệnh được tập hợp từ các tập lệnh có nghĩa là được chạy liên tiếp hoặc tập tin có nghĩa là được chia thành một số tập lệnh độc lập nhưng việc chia tách không thành công. Điều gì là ngay trước khi các #!dòng thêm ?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, tôi tin rằng không có mục đích ẩn nào thêm của kịch bản đó. Đó là một tập lệnh tĩnh có tên Uninstall.command(nền tảng: Mac OS X).
Barat Sahdzijeu

Câu trả lời:


9

Nếu các dòng này không phải là khởi đầu của các tập lệnh shell được bao gồm sẽ được xây dựng, tức là bên trong một sơ đồ có dạng:

cat <<end_of_shell_script >dynamically_built_shell
#!/bin/bash
[...]
end_of_shell_script

Sau đó, cấu trúc lặp đi lặp lại mà bạn tìm thấy là kết quả của nhiều copy- pastecủa kịch bản shell đầy đủ nhưng không chăm sóc đủ và hiểu biết về việc sử dụng những bình luận rất đặc biệt trên dòng 1 của kịch bản là gì, bắt đầu với #!.

Hãy cẩn thận trước khi sử dụng tập lệnh shell như vậy (không sudo, không su:)).


BTW, rất nhiều sudo ở đó ... Jeezzz ...
Barat Sahdzijeu

/bin/rm(+ thứ giả để nuôi robot)!
dan

3
... hoặc kết hợp nhiều tập lệnh bash tương tự như cách nó sẽ được thực thi nếu bạn đặt sourcechúng theo tên. Mặc dù vậy, tôi không thấy sự cần thiết cho bộ não. Nó hoàn toàn được chấp nhận theo cách này và đó là lý do tại sao shebang là một dòng bình luận.
0xC0000022L

Sau một cái nhìn thứ hai, tôi nhận thấy một số dòng khác lặp đi lặp lại, vì vậy tôi có xu hướng nghĩ rằng đó chỉ là bản sao chép bất cẩn từ nhiều tập lệnh.
Barat Sahdzijeu

4

Không có mục đích, đây chỉ là ý kiến. Trừ khi 'một số lệnh' chứa một số lệnh lưu tệp này vào tệp riêng biệt để thực hiện sau này.


Không có bất kỳ hoạt động bằng văn bản và thực hiện tiếp theo. Kịch bản lệnh này chỉ là một tập hợp các rmhoạt động để gỡ cài đặt một số ứng dụng. Tôi nghĩ rằng nó có thể liên quan đến việc giả mạo vỏ mới, nhưng rõ ràng đó là bản sao dán bẩn của người tạo tập lệnh.
Barat Sahdzijeu

@BaratSahdzijeu HÃY CẨN THẬN VỚI CÁC LOẠI RANDOM VỚI rm Ở ĐÂY! Xin lỗi cho mũ, nhưng tôi không thể nhấn mạnh điều đó quan trọng như thế nào. Nếu tác giả ban đầu đã mắc sai lầm (hay đúng hơn là sai lầm), nó có thể làm hỏng phần mềm khác trên máy và thậm chí phá vỡ HĐH.
Nzall

Nate, cảm ơn! Thật ra tôi không chạy kịch bản shell đó. Tôi đã sử dụng nó làm nguồn học tập để gỡ cài đặt trên nền tảng Mac OS X (Linux như OS). Nghĩ rằng có thể nó có một số hương vị đặc biệt của bash có ý nghĩa là shebang lặp đi lặp lại trong một kịch bản.
Barat Sahdzijeu

Việc #!sử dụng tương tự ở cấp độ kernel (xem man execve) trên bất kỳ hệ thống Unix nào (OpenBSD, FreeBSD, MacOS X, Kali-linux linux). Không bashchỉ đơn giản xem đây là một nhận xét.
dan

@NateKerkhofs Và mv ln cp dd vi ...cùng với 200 lệnh khác là gì? Tại sao bạn không nhấn mạnh chúng quá? Họ có thể cảm thấy bị bỏ rơi.
ott--
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.