繁体   English   中英

如何从Shell脚本返回然后重新启动(与VirtualBox一起使用)?

[英]How can I return from a shell script and then reboot (to use with VirtualBox)?

我在带有Windows主机和Linux(RHEL7)来宾的Virtual Box中使用guestcontrol。 我想通过在来宾上运行Shell脚本(从主机上的.bat)来从主机到来宾进行一些配置。 这很好并且脚本可以运行,但是,当我调用重新引导时,脚本会挂起(我相信是因为什么都没有返回)。 因此,当调用以下.sh时:

#!/bin/bash
echo "here"
exit

.bat文件显示“此处”,然后退出(或者如果我使用pause,则会给出正确的消息)。 但是,当我添加重启时,.bat永远不会处理任何超出其调用脚本位置的内容。 我认为这是因为来宾从未告诉主机脚本已完成。

我已经尝试过类似的事情:

#!/bin/bash
{ sleep 1; reboot; } >/dev/null &
exit

甚至:

#!/bin/bash
do_reboot(){
  sleep 1
  reboot
}
do_reboot() &
exit

但是.bat永远不会超过运行.sh的行

我怎样才能告诉主机.sh脚本(在客户机上)已完成,以便可以继续使用.bat脚本?

我们需要确保没有正在运行的子进程,因此我们要使用nohup命令进行提示。 因此脚本就是这样的:

#!/bin/bash

nohup reboot &> /tmp/nohup.out </dev/null &
exit

stdin和stdout引起了问题,因此这只是将它们发送到void中,因此脚本将不会等待任何其他进程的任何输入。

如果此脚本有任何问题,可以执行以下操作:

#!/bin/bash

nohup /path/to/reboot_delay.sh &> /tmp/nohup.out </dev/null &
exit

然后在/path/to/reboot_delay.sh中,您将拥有:

#!/bin/bash
sleep 10 # or however many seconds you need to wait for something to happen
reboot

这样,您甚至可以花一些时间来完成某件事,等等,但是主机(或ssh或您从何处调用它)仍然会知道脚本已经完成并需要做的事情。

我希望这可以在将来对人们有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM