Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl运行两个系统命令时出错_Perl_Unix_Command_System - Fatal编程技术网

perl运行两个系统命令时出错

perl运行两个系统命令时出错,perl,unix,command,system,Perl,Unix,Command,System,因此,在我的脚本中,我需要对unix进行调用,并通过系统命令执行,如下所示: system "bash -i -c 'addmothernode'"; ... perl code ... ... system "bash -i -c 'addnode -ip=$_'"; 但是,每当我在同一个脚本中运行这两个命令时,出于某种原因,我的进程会停止,如下所示: [1]+ Stopped perl boot.pl 只有在运行fg%1时,脚本才能完成。当我只有

因此,在我的脚本中,我需要对unix进行调用,并通过系统命令执行,如下所示:

system "bash -i -c 'addmothernode'";

...

perl code ...

...

system "bash -i -c 'addnode -ip=$_'";
但是,每当我在同一个脚本中运行这两个命令时,出于某种原因,我的进程会停止,如下所示:

[1]+  Stopped                 perl boot.pl
只有在运行
fg%1
时,脚本才能完成。当我只有其中一个系统调用时,perl脚本将成功完成。但我需要这两个命令,因为它们相互依赖。有人知道发生了什么事吗?谢谢

更新:


下面的很多答案都说我不需要使用
bash-I
来运行系统命令,我知道这通常是正确的,但我需要使用我创建的别名,如果我不使用它,别名将无法识别。所以我确实需要
bash-I

bash-I意味着运行一个交互式shell;因此,有两个外壳都从终端读取

尝试删除
-i
选项

system "addmothernode"; 
应该有用


要执行命令,不需要bash。Perl
system
函数类似于systemc函数,它默认调用
sh

调用者遵循的标准决定了使用哪个shell。看


这个问题与perl无关。如果您在交互模式(
-i
)中依次启动两个bash,则可以轻松地再现这种情况:

$ cat 1.sh 
bash -i -c 'sleep 1'
bash -i -c 'sleep 1'

$ bash 1.sh

[1]+  Stopped                 bash 1.sh
当然,最好在非交互模式下运行bash(不带
-i
),或者直接运行程序,不带bash,但是如果出于某种原因需要
bash-i
,可以使用
setsid
保护其运行:

$ cat 1.sh
setsid bash -i -c 'sleep 1'
setsid bash -i -c 'sleep 1'
echo done

$ bash 1.sh
done

伟大的非常感谢。我需要
bash-I
在命令中运行我的别名。这正是我所需要的:)我很高兴能帮助你!另一个解决方案是:
bash-c.~/。巴什尔委员会;回显完成“
。您的命令必须是echo done,而不是
$ cat 1.sh
setsid bash -i -c 'sleep 1'
setsid bash -i -c 'sleep 1'
echo done

$ bash 1.sh
done