perl运行两个系统命令时出错
因此,在我的脚本中,我需要对unix进行调用,并通过系统命令执行,如下所示: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时,脚本才能完成。当我只有
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