0

これが更新された質問です

脚本:

open (my $pipe, "| ptsetenv.sh $ProductType $Release");

print $pipe "genidasack.py -v --alignment=mips64 -a -s $WORKSPACE/dbgen/ose_signals_ADA.sdt -o $WORKSPACE/$Product/\n";

close ($pipe);  

コマンド 2:

ptsetenv.sh $ProductType $Release  # Sets Environment Variables and creates a Child Shell

コマンド 3:

genidasack.py -v --alignment=mips64 -a -s $WORKSPACE/dbgen/ose_signals_ADA.sdt -o $WORKSPACE/$Product/\n #this has to be executed on child Shell created by Command 2  

現在、最初の行の子シェルが呼び出された後に perl スクリプト内でスクリプトを実行すると、子シェルからタイプ終了するとスクリプトが子シェルに残りますが、これは必要ではありません。

ptsetenv.sh の内容は次のとおりです。

 envsetup.py $*

 ./export_env.sh

export_env.sh は、基本的に子シェルを作成するスクリプトです

export_env.sh の内容が必要な場合はお知らせください

export_env.sh の内容は次のとおりです。

has_dir()

    {
                 if [ -d $1 ]; then
                     return 0
                else
                 return 1
                fi
           }
            has_dir $DXENVROOT
             if [ "$?" != "0" ]; then
                echo "Directory $DXENVROOT does not exist. Exiting the script."
                exit -1
            fi
 echo "Environment set to ${DXENVNAME} ${DXENVVERSTR}"

 echo $SHELL

 $SHELL

echo "Exiting ${DXENVNAME} ${DXENVVERSTR} shell"
4

1 に答える 1

0

これにより、子シェルで一連のコマンドが実行されます。

system("Command 1; python script; Command 2");

次のこともできます。

system("Command 1");
system("python script");
system("Command 2");

これにより、コマンドに特殊なシェル文字が含まれていない場合、シェル プロセスの作成が回避されます。

アップデート:

Python スクリプトがサブシェルを開始することを明確にしたので、コマンドをサブシェルに送信する方法は次のとおりです。

open (my $pipe, "| Command 1; python script");
print $pipe "Command 2\n";
close ($pipe);
于 2013-02-04T18:26:55.410 に答える