我如何从 shell 脚本 return 然后重新启动(与 VirtualBox 一起使用)?
How can I return from a shell script and then reboot (to use with VirtualBox)?
我正在使用带有 Windows 主机和 Linux (RHEL7) 客户机的 Virtual Box 来宾控制。我想通过 运行 来宾上的 shell 脚本(来自主机上的 .bat)从主机到来宾进行一些配置。这很好并且脚本运行,但是,当我调用重新启动时它挂起(我相信这是因为没有返回任何内容)。所以当下面的.sh被调用时:
#!/bin/bash
echo "here"
exit
.bat 文件显示 "here" 然后退出(或者如果我使用暂停会给出正确的消息)。但是,当我添加重新启动时,.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 或任何你调用它的地方)仍然会知道脚本已经完成并做它需要做的事情。
希望这对以后的人有所帮助。
我正在使用带有 Windows 主机和 Linux (RHEL7) 客户机的 Virtual Box 来宾控制。我想通过 运行 来宾上的 shell 脚本(来自主机上的 .bat)从主机到来宾进行一些配置。这很好并且脚本运行,但是,当我调用重新启动时它挂起(我相信这是因为没有返回任何内容)。所以当下面的.sh被调用时:
#!/bin/bash
echo "here"
exit
.bat 文件显示 "here" 然后退出(或者如果我使用暂停会给出正确的消息)。但是,当我添加重新启动时,.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 或任何你调用它的地方)仍然会知道脚本已经完成并做它需要做的事情。
希望这对以后的人有所帮助。