perl运行两个系统命令错误

时间:2012-07-03 05:55:25

标签: 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时才能完成脚本。当我只有其中一个系统调用时,perl脚本成功完成。但我需要两个命令,因为它们相互依赖。有什么想法发生了什么?谢谢!

更新:

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

3 个答案:

答案 0 :(得分:4)

这个问题与perl无关。如果您一个接一个地在交互模式(-i)中开始两个骰子,您可以轻松地重现这种情况:

$ 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

答案 1 :(得分:2)

bash -i表示运行交互式shell;所以你有两个炮弹都从终端读取。

尝试删除-i选项。

答案 2 :(得分:2)

system "addmothernode"; 

应该有用。


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

man system

exec

调用者符合的标准决定了使用哪个shell。请参阅standards(5)

Standard                                      Shell Used
______________________________________________________________
1989 ANSI  C,  1990  ISO  C,  1999  ISO  C,   /usr/xpg4/bin/sh
POSIX.1  (1990-2001),  SUS,  SUSv2,  SUSv3,
XPG4
POSIX.1 (1988), SVID3,  XPG3,  no  standard   /usr/bin/sh
specified