In Anbetracht der angezeigten Datei sollten Sie in der Lage sein:
(set -f ; IFS='
' ; env - $(cat /path/to/file) /path/to/your/program
)
Wenn es nicht funktioniert, müssen Sie zuerst Ihre Umgebungsdatei formatieren. Hier ist ein Beispiel:
(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
Ich dachte zuerst, Sie könnten es über die Shell tun - aber es wird wahrscheinlich eine eigene Umgebung festlegen, bevor Sie Ihr Programm aufrufen. Aber ich kann zumindest zeigen, dass die Argumente richtig zugeordnet sind:
(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
Wenn Sie es dennoch lieber als Quelle verwenden möchten, können Sie die Shell folgendermaßen verwenden:
(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
Beachten Sie, dass ich das $IFS
Zeug entfernt habe - das ist auf diese Weise nicht notwendig -, aber ich musste mich über die Anführungszeichen in der Datei informieren. Hier bin ich im Wesentlichen .dot
Sourcing stdin
- Lesen der |pipe
als Eingabe - aber Sie können jede Datei verwenden. Ich benutze set -a
vor dem Lesen der Eingabedatei, um die --allexport
Option festzulegen.
Das ist ein Ergebnis der Verwendung von bash
's sh
- es fügt hinzu $PWD
, $SHLVL
und $_
. Damit ist dash
es etwas besser. Außerdem werden dash
keine Exporte hinzugefügt, sodass Sie den -a
Parameter in der Befehlszeile angeben können :
(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
Nur $PWD
kommt durch.
/path/to/myscript.py
?