Tôi muốn viết một tập lệnh foo
mà chỉ đơn giản là gọi bar
với cùng một đối số chính xác được gọi bằng, sử dụng Bash hoặc Perl.Làm cách nào để có được các đối số dòng lệnh chưa sửa đổi để "bọc" một công cụ dòng lệnh khác?
Bây giờ, một cách đơn giản để làm điều này trong perl sẽ
#!/bin/perl
my $args=join(' ', @ARGV);
`bar $args`;
Tuy nhiên, các giá trị trong argv đã được xử lý bằng vỏ, do đó nếu tôi gọi
foo "I wonder, \"does this work\""
thanh sẽ được gọi như thế này
bar I wonder "does this work"
Làm cách nào tôi có thể nhận được dòng lệnh gốc để tôi có thể truyền đúng nguyên văn?
Một lưu ý là, tất nhiên, giá trị trả về từ
system()
là giá trị trả về từ việc thực thi chương trình, chứ không phải đầu ra từ chương trình. Nó có thể là cần thiết để chuyển hướng đầu ra vào một tập tin và đọc các tập tin, nếu bạn đang cố gắng để thu thập sản lượng của nó. – atk@atk: trong trường hợp đó, bạn có thể sử dụng một quy trình xử lý. – Ether
không, trong trường hợp đó bạn sử dụng IPC :: Chạy hoặc IPC :: Cmd – ysth