Có cách nào để thực thi kịch bản lệnh nhiều dòng bằng cách đường ống tới đầu vào tiêu chuẩn của vỏ từ xa trong fabric? Hoặc tôi phải luôn luôn ghi nó vào hệ thống tập tin từ xa, sau đó chạy nó, sau đó xóa nó? Tôi thích gửi đến stdin vì nó tránh được tệp tạm thời. Nếu không có API vải (và có vẻ như không dựa trên nghiên cứu của tôi), có lẽ tôi chỉ có thể sử dụng mô-đun ssh
trực tiếp. Về cơ bản, tôi muốn fabric.api.run
không bị giới hạn bởi lệnh 1 dòng được chuyển tới shell như một đối số dòng lệnh, nhưng thay vào đó sẽ lấy một kịch bản nhiều dòng và ghi nó vào đầu vào tiêu chuẩn của remote shell.Chạy kịch bản lệnh shell bằng cách sử dụng văn bản lệnh và văn bản đường dẫn đến tiêu chuẩn của vỏ sò
Để làm rõ Tôi muốn tương đương với vải của dòng lệnh này:
ssh somehost /bin/sh < /tmp/test.sh
Ngoại trừ trong python các coude nguồn kịch bản sẽ không đến từ một tập tin trên hệ thống tập tin địa phương, nó sẽ chỉ là một chuỗi multiline trong ký ức. Lưu ý rằng đây là một thao tác logic duy nhất và không có tệp tạm thời nào ở phía bên trái, có nghĩa là các lỗi không mong muốn và các sự cố không để lại các tệp mồ côi. Nếu có một lựa chọn như vậy trong vải (đó là những gì tôi hỏi về), sẽ không cần phải là một tập tin tạm thời ở hai bên và điều này sẽ chỉ đòi hỏi một hoạt động ssh duy nhất.
Tại sao không chỉ làm điều gì đó như 'chạy ('command1 && command2 && command2' ')? – Tshepang
Vì A) không dễ đọc hoặc viết hoặc duy trì như mã shell-in-python, B) && ảnh hưởng đến luồng mã của bạn theo những cách bạn có thể hoặc không muốn và C) thế giới đã đầy vỏ hiện có kịch bản tôi muốn chạy qua vải mà không cần chuyển đổi chúng thành một dòng. –