Tôi đã sử dụng shebang #!
một thời gian và hôm nay đã bắt gặp một trường hợp sử dụng làm tôi bối rối.Shebang "#!" bắt đầu và "! #" kết thúc?
Có một số cách để chạy scala kịch bản như
#!/usr/bin/env scala
println("hello world")
Tuy nhiên, tôi đã xem qua phiên bản này của công việc
#!/bin/sh
exec scala "$0" "[email protected]"
!#
println("hello world")
Hình như giải pháp này về cơ bản sẽ gọi bash đầu tiên, chạy exec scala "$0" "[email protected]"
nơi $0
biểu thị tên tệp hiện tại và [email protected]
là đối số đầu vào trong một mảng vị trí.
Câu hỏi của tôi là điều đó có nghĩa tất cả mọi thứ giữa #!
và !#
có thể được thực hiện trong bash,
#!/bin/sh
exec scala "$0" "[email protected]"
echo "oh Yeah"
!#
println("hello world")
Nó không lôi ra nhưng không phải cho tôi "Oh yeah" trong stdout, bất cứ ai có thể giải thích cho tôi đang làm gì ở đây?
update: sau khi nhận ra !#
là một điều scala, tôi đã tải về mã nguồn của scala và nhận ra nó chỉ xuất hiện trong các bình luận của ScriptRunner.scala phần được viết bởi Lex Spoon.
'exec' thay thế quy trình hiện tại bằng quy trình mới. Không có gì sau khi nó chạy. –
@EtanReisner, thì trình thông dịch mới (trình thông dịch scala) trong trường hợp này biết nó nên bắt đầu từ 'println()' và không phải là 'echo', là nơi'! # 'Được sử dụng cho? –
Nói cách khác, bạn có thể nhận được 'echo' xuất hiện nếu được đặt trước' exec'.Perl ghi lại một số ký hiệu liên quan trong ['perldoc perlrun'] (http://perldoc.perl.org/perlrun.html). –