![](/img/trans.png)
[英]How can I return a value from a function call in a shell script without creating a subshell?
[英]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.