Đư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 $IFS
nộ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 .dot
tì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 -a
trước khi đọc các tập tin đầu vào để thiết lập --allexport
tùy chọn.
Đó là kết quả của việc sử dụng bash
's sh
- nó cho biết thêm $PWD
, $SHLVL
và $_
. Với dash
nó là tốt hơn một chút. Và dash
cũng không thêm một loạt các bản xuất, vì vậy bạn có thể chỉ định -a
tham 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
?