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 file
thô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 file
có thể là một tệp văn bản đáng kể và sử dụng bash read
là 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.sh
là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.py
vớ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.
local
LDA của chính postfix hay cái gì khác, nhưprocmail
haydeliver
? Có điều gì trong bạn~/.bashrc
có thể làm xáo trộn môi trường như nhìn thấymain.py
khi chạy từ bên trongscript.sh
khô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.