Đưa ra tệp bạn hiển thị, bạn sẽ có thể làm:
(set -f ; IFS='
' ; env - $(cat /path/to/file) /path/to/your/program
)
Nếu nó không hoạt động thì đó chỉ là do bạn cần định dạng tệp môi trường của mình trước. Đây là một ví dụ:
(set -f ; IFS='
' ; env - $(cat) printenv
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
Lúc đầu tôi nghĩ bạn có thể làm điều đó thông qua trình bao - nhưng có lẽ nó sẽ thiết lập một số môi trường riêng trước khi gọi chương trình của bạn. Nhưng ít nhất tôi có thể chứng minh rằng các đối số được gán chính xác:
(set -f; IFS='
' ; env - $(cat) sh -c 'echo "$variable3"'
) <<\ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
ENV
###OUTPUT###
value3 an$d s'om\e m"ore
Tuy nhiên, nếu bạn muốn tìm nguồn này, đây là cách bạn có thể sử dụng shell:
(echo '$1'; cat; echo '$2') <<\ENV |\
env - sh -s -- 'set -a' printenv
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
###OUTPUT###
PWD=/home/mikeserv/test
SHLVL=1
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
_=/usr/bin/printenv
Lưu ý rằng tôi đã xóa $IFSnội dung - điều đó không cần thiết theo cách này - nhưng tôi đã phải nhận được cụ thể về các trích dẫn trong tệp. Ở đây tôi chủ yếu .dottìm nguồn cung ứng stdin- đọc phần |pipeđầu vào - nhưng bạn có thể sử dụng bất kỳ tệp nào. Tôi sử dụng set -atrước khi đọc các tập tin đầu vào để thiết lập --allexporttùy chọn.
Đó là kết quả của việc sử dụng bash's sh- nó cho biết thêm $PWD, $SHLVLvà $_. Với dashnó là tốt hơn một chút. Và dashcũng không thêm một loạt các bản xuất, vì vậy bạn có thể chỉ định -atham số trên dòng lệnh:
(cat; echo '$1') <<\ENV |\
env - dash -sa -- printenv
variable1=value1
variable2=value2
variable3='value3 an$d s'\''om\e m"ore'
ENV
variable1=value1
variable2=value2
variable3=value3 an$d s'om\e m"ore
PWD=/home/mikeserv/test
Chỉ $PWDđi qua.
/path/to/myscript.py?