Tôi có một tập lệnh bash gọi một tập lệnh python Tôi muốn cung cấp nội dung filethông qua stdin. Gọi tập lệnh bash như:
./script.sh < file
Và nội dung của script.sh:
#! /usr/bin/env bash
pushd /some/python/virtual/environment/working/dir
source venv/bin/activate
python main.py ??????
deactivate
popd
Tôi không biết phải điền gì để ??????chuyển nội dung fileđược cung cấp cho tập lệnh bash dưới dạng stdin sang tập lệnh python main.py.
Lưu ý rằng filecó thể là một tệp văn bản đáng kể và sử dụng bash readlà không mong muốn.
Sử dụng stdin khi gọi tập lệnh bash là một yêu cầu. Tôi linh hoạt để vượt qua bất cứ điều gì để main.py.
Bất kỳ ý tưởng ngoài kia làm thế nào để giải quyết câu hỏi hóc búa này?
thêm vào
Câu trả lời của @cas đã nói rõ với tôi rằng tôi cũng cần giải thích về bối cảnh nào tôi cố gắng sử dụng script.sh.
Tôi muốn sử dụng script.shlàm tập lệnh chuyển tiếp trong ~/.forward, với nội dung:
|/path/to/script.sh
Mà postfix nào gọi là /path/to/script.sh; Nhật ký rõ ràng về điều đó. Một thử nghiệm đơn giản sử dụng phiên bản mặc quần áo của kịch bản python, như:
|/path/to/simple/main.py
Chứng minh rằng postfix thực hiện cuộc gọi main.pyvới nội dung của thư trên stdin. Nhưng sự kết hợp dường như không hoạt động.
localLDA của chính postfix hay cái gì khác, nhưprocmailhaydeliver? Có điều gì trong bạn~/.bashrccó thể làm xáo trộn môi trường như nhìn thấymain.pykhi chạy từ bên trongscript.shkhông? có thể đăng nhập môi trường bằng cách chạy một cái gì đó như{ typeset -p ; echo } >> "/tmp/forward.log"bên trong script.sh.