Điểm:-1

trong perl, lệnh "hệ thống", sử dụng đối tượng gián tiếp, chuyển hướng không hoạt động, cần trợ giúp

lá cờ ws

Tôi đang chạy Kubfox 20.04. Phiên bản perl được hiển thị bởi perl -v là

perl 5, phiên bản 30, subversion 0 (v5.30.0) được xây dựng cho x86_64-linux-gnu-thread-multi (với 50 bản vá đã đăng ký, xem perl -V

Tôi vừa thực hiện cập nhật apt-get và với trình quản lý gói Muon, tôi đã nâng cấp tất cả các gói perl đã cài đặt.

Nhưng sau đó perl vẫn là 5 như trước, mình không có perl 6.

Vấn đề của tôi không phải là khi tôi sử dụng lệnh hệ thống đơn giản như

perl -we 'system("echo \"aaa\" > /tmp/WEx_args_file"); '

Trong trường hợp này, tệp được ghi.

Nhưng khi sử dụng cách đối tượng gián tiếp, như

perl -we ' @WE_args = ( "echo", " \"qqq\" > /tmp/WEx_args_file" ); $WE_retcod_system = hệ thống { $WE_args[0] } @WE_args; in "WE_retcod_system: ~", $WE_retcod_system, "~\n"; if($WE_retcod_system != 0) { die "\nsystem >>>YYY>>>@WE_args<<<YYY<<< fail: $?"; }; '

trong trường hợp này, tệp không được ghi.

Đầu ra được hiển thị trên màn hình:

"qqq"> /tmp/WEx_args_file

sau đó làm theo

WE_retcode_system: ~0~

Tôi đã thử cách đối tượng gián tiếp trong nhiều biến thể trong cả ngày. Tôi chưa tìm thấy mã tệp tmp sẽ được ghi.

Xin vui lòng, có ai biết một giải pháp?

=====

Khi cố gắng tiếp tục, tôi đã tìm thấy điều rất tốt

IPC::Hệ thống::Đơn giản

Bằng cách này, ý định của tôi là thay thế mã backtick của tôi

tiếng vang -n "qqq" | xxd -g1

với chức năng capturex, như

perl -we ' sử dụng IPC::System::Simple qw/capturex/; open(FHo, ">/tmp/Wex_args_file") hoặc chết; $WE_got_from_cpx = captx("echo", "-n", ""qqq"", "|", "xxd -g1" ); in FHo "WE_got_from_cpx: ~", $WE_got_from_cpx, "~\n"; '

Theo như tôi hiểu, đây là cách sử dụng chính xác của Capturex. Nhưng vấn đề mới, nó không hoạt động.

Lệnh trên RHS của đường ống, tức là

xxd -g1

không được thực hiện mà chỉ được sao chép. Kết quả là

WE_got_from_cpx: ~"qqq" | xxd -g1~

Tôi e rằng các mô-đun này trong IPC::System::Simple dựa trên điểm dẫn đầu giống như cách "đối tượng gián tiếp" mà chỉ đối số đầu tiên là lệnh được thực thi.

Làm cách nào tôi có thể sử dụng IPC::System::Simple để thực hiện toàn bộ chức năng backtick?

Trân trọng trái dấu

muru avatar
lá cờ us
Tại sao bạn chuyển `echo` làm đối số nhưng lại kết hợp `"qqq" > /tmp/WEx_args_file` thành một đối số?
Anton Wessel avatar
lá cờ ws
Cách được đề xuất, được gọi là "đối tượng gián tiếp" ngụ ý rằng lệnh được thực thi được viết theo định dạng như vậy: phải b
Anton Wessel avatar
lá cờ ws
Cách được đề xuất, được gọi là "đối tượng gián tiếp" ngụ ý rằng lệnh sẽ được thực thi được viết theo định dạng như vậy: phải là tiền thân trước của danh sách theo sau, danh sách lệnh "danh sách hệ thống". Tất cả các bài viết trung gian không hoạt động, ngoại trừ khi giảm xuống trường hợp đầu tiên của tôi chỉ đơn giản là sytem()..
raj avatar
lá cờ cn
raj
Sử dụng cú pháp đối tượng gián tiếp, bạn đang chuyển `"qqq" > /tmp/WEx_args_file` dưới dạng một chuỗi đối số cho lệnh `echo`, vì vậy không có gì ngạc nhiên khi lệnh in ra chính xác điều đó. Trong phiên bản đơn giản, đối số chỉ là `\"aaa\"`. Chuyển hướng (`> /tmp/WEx_args_file`) **không** là một phần của chuỗi đối số; nó được xử lý bởi trình bao trước khi các đối số được chuyển đến lệnh. Bạn cần tìm cách xử lý chuyển hướng bằng cú pháp đối tượng gián tiếp; điều này có thể phức tạp, nếu có thể, có thể sẽ liên quan đến một số thao tác trên bộ mô tả tệp. Tôi khuyên bạn nên hỏi trên StackOverflow về điều đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.