私はbash
とdash
で次のコマンドを実行しようとしています。envのPATH =」:後の実行のための文字列でシェルコマンドを構築する移植可能
x="env PATH=\"$PATH:/dir with space\""
cmd="ls"
"$x" $cmd
これは
-bashで失敗します/ opt/local/bin:/ opt/local/sbin:/ usr/local/bin:/ usr/bin// bin:/ usr/sbin:/ sbin:/ opt/X11/bin:/ usr/local/git/bin:/ usr/local/go/bin:/ dir (空白あり):このようなファイルまたはディレクトリはありません
注次作品:
env PATH="$PATH:/dir with space" $cmd
私はx
変数ENVに割り当てていた理由を、それはまた、複雑な変数である$cmd
に大きなコマンドラッパーの一部であるため、あります。
初期の例より複雑です。私はこれらの変数を毎回繰り返す代わりに設定するという論理を持っています。ここに示すように、最終的に呼び出しは次のとおりです。
path_value="$PATH"
invocation="env PATH=\"$path_value\" $other_val1 $other_val2"
base="python python_script.py --opt1=a,b,c script_args"
add_on="$base more_arg1 more_arg2"
"$invocation" $base
あなたは、スペースをエスケープしてみましたか? – MikeVelazco
より簡単な例を見てみましょう: 'x =" echo hello "; "$ x" ' - これは' echo hello:command not found'を返します - "$ x"を引用符で囲まずに実行してみてください。 –
下のコメントにサブプロセスを記述すると、_shell_コードを使用して実際にコマンドライン文字列を作成していますか?文字列をPythonで構築する場合、異なる考慮事項が適用されます。 – mklement0