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  

目前,当我在调用第一行子 shell 后在 perl 脚本中运行脚本时,当从子 shell 中键入 exit 时,脚本仍保留在子 shell 中,执行后续脚本行,这不是需要的!

这是 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

这将在子 shell 中运行一系列命令:

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

你也可以这样做:

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

如果命令中没有特殊的 shell 字符,这可以避免创建 shell 进程。

更新:

现在您已经阐明了 python 脚本启动了一个子 shell,下面是如何向它发送命令:

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