Tôi có một tập lệnh gọi mô-đun Thời gian :: HiRes của Perl để tính thời gian trôi qua. Về cơ bản các kịch bản được thời gian bằng cách đi qua sau một liner:Làm cách nào để thực thi mã Perl được lưu trữ bên trong biến tập lệnh shell?
use Time::HiRes qw(time); print time
để thông dịch Perl qua ve lưng và nhận lại kết quả.
#/bin/sh
START_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
END_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
ELAPSED_TIME=$(echo "($END_TIME - $START_TIME)" | bc)
echo $ELAPSED_TIME
Tôi đã cố gắng viết lại theo cách mô đun hơn nhưng tôi bị bối rối bởi các quy tắc trích dẫn của bash shell.
#/bin/sh
CALCULATE='bc'
NOW="perl -e 'use Time::HiRes qw(time); print time'"
START_TIME=`$NOW`
[Some long running task ...]
ELAPSED_TIME=$(echo "($NOW - $START_TIME)" | $CALCULATE)
echo $ELAPSED_TIME
Bash phàn nàn rằng nội dung nào đó không được trích dẫn đúng cách. Tại sao không bash chỉ mở rộng lệnh bằng $ NOW và chuyển nó vào dấu tick để thực thi?
Tôi đã thử nhiều cách khác nhau để nhúng mã perl trong biến tập lệnh shell nhưng dường như không thể nhận được mã này .
Bất kỳ ai biết cách trích dẫn mã perl bên trong tập lệnh trình bao chính xác?
@Mat Để giúp mọi người dễ dàng trả lời hơn, tôi chỉ trích đoạn trích từ tập lệnh lớn hơn nhiều. Tôi cắt và dán nó sai. Cảm ơn bạn đã chỉ ra. Đã sửa. Nhưng vấn đề vẫn là trích dẫn mặc dù. – GeneQ
FYI, bạn có thể viết perl của bạn một lớp lót như 'perl -MTime :: HiRes = time -e 'in time'' –