3

因此,在我的脚本中,我需要调用 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

4

3 回答 3

4

此问题与 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,但如果出于某种原因需要,bash -i可以使用以下命令保护它的运行setsid

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

$ bash 1.sh
done
于 2012-07-03T08:05:37.637 回答
2

bash -i装置运行交互式外壳;所以你有两个shell都从终端读取。

尝试删除-i选项。

于 2012-07-03T06:36:53.740 回答
2
system "addmothernode"; 

应该管用。


要执行命令,不需要 bash。Perlsystem函数就像系统 C 函数一样,默认调用sh.

人系统

执行

调用者遵循的标准决定了使用哪个 shell。见标准(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
于 2012-07-03T07:30:43.097 回答