Vì vậy, nếu tôi hiểu đúng, bạn muốn đưa mã nhị phân vào tập lệnh của mình và thực thi nó trên lối ra tập lệnh?
Dưới đây là một kịch bản binarymaker
(Điều này không chỉ tạo ra một kịch bản mà trích ra một nhị phân, nhưng kết hợp bất kỳ kịch bản của bạn với bất kỳ nhị phân):
#!/bin/bash
lineCount=$(wc -l "$1" | cut -f 1 -d ' ') # just get the line count
((lineCount+=2)) # because we are going to append a line
head -n 1 "$1" > "$3" # this is done to ensure that shebang is preserved
echo "trap 'tail -n +$lineCount \$0 > binary; chmod +x binary; ./binary' EXIT" >> "$3"
tail -n +2 "$1" >> "$3"
cat "$2" >> "$3"
exit 0
Bạn nên chạy nó như thế này
./binarymaker myscript mybinary resultscript
Nếu bạn chạy resultscript
thì cả hai myscript
và mybinary
sẽ được thực hiện. Bạn có thể tùy ý thêm lệnh vào rm
nhị phân sau đó.
Ngoài ra, đừng quên thoát ở cuối tập lệnh của bạn vì nếu không nó sẽ tiếp tục và cố gắng phân tích cú pháp dữ liệu nhị phân.
Nếu bạn đang làm việc với một kịch bản và không phải là một nhị phân, sau đó nó có thể được thực hiện từ ống như thế này:
tail -n +$lineCount \$0 | source /dev/stdin
Nhưng nó không phải là đi làm việc trên mã nhị phân thực. Ngoài ra, nó không hoạt động nếu phiên bản bash của bạn dưới 4
Nguồn
2013-08-23 20:49:23
Tôi biết điều đó là có thể, bởi vì tôi đã thấy nó được thực hiện trong tập lệnh cài đặt MKL của Intel. Tôi không chắc chắn * làm thế nào * nó đã được thực hiện, nhưng nó là có thể. – SethMMorton
có thể trùng lặp của [Nhúng một tệp nhị phân thực thi trong một tập lệnh shell] (http://stackoverflow.com/questions/10491704/embed-a-executable-binary-in-a-shell-script) – mschilli
java 6 jdk đã từng có một dạng phân phối của một tệp '.sh' đơn 80+ MB, trong đó tập lệnh" đã kết thúc "với dòng' thoát 0' và các phần nhị phân theo sau nó. kịch bản trích xuất các phần nhị phân từ chính nó với một dòng như 'đuôi $ {tail_args} +189" $ 0 "> $ outname'; đã làm một 'trap' với' rm', đã làm một 'sum' cho checksum, một' chmod' và thực hiện nó như './$ outname' – n611x007