bash&;对于循环中的最后一个命令

bash&;对于循环中的最后一个命令,bash,Bash,我刚刚编写了我的第一个bash脚本,用于在开发服务器上启动一些redis实例。虽然它大部分工作正常,但最后一个打开的redis实例正在阻止活动终端–尽管我有尾随的&符号,其他启动的实例没有阻止终端。我怎样才能把它们都推到后台呢 以下是脚本: #!/bin/bash REDIS=(6379 6380 6381 6382 6383 6390 6391 6392 6393) for i in "${REDIS[@]}" do : redis-server --port $i &

我刚刚编写了我的第一个bash脚本,用于在开发服务器上启动一些redis实例。虽然它大部分工作正常,但最后一个打开的redis实例正在阻止活动终端–尽管我有尾随的
&
符号,其他启动的实例没有阻止终端。我怎样才能把它们都推到后台呢

以下是脚本:

#!/bin/bash 
REDIS=(6379 6380 6381 6382 6383 6390 6391 6392 6393)
for i in "${REDIS[@]}"
do
    :
    redis-server --port $i &
done

听起来你的终端并没有被阻止,你的提示被覆盖了。这纯粹是一个表面问题。由于终端的工作方式,bash不知道如何重新绘制它,因此看起来该命令位于前台

再次运行脚本,然后盲目键入
ls
Enter。您可能会看到shell响应正常,即使您看不到提示


您也可以直接按Enter键让bash重新绘制提示。

听起来您的终端实际上没有被阻止,您的提示只是被覆盖了。这纯粹是一个表面问题。由于终端的工作方式,bash不知道如何重新绘制它,因此看起来该命令位于前台

再次运行脚本,然后盲目键入
ls
Enter。您可能会看到shell响应正常,即使您看不到提示


你也可以点击回车键让bash重新绘制提示。

整个脚本仍然需要完成-你是否使用
/scriptname&
运行它?另外,我想,在标题和文本中键入
$
,而不是
&
。啊,不,我没有-就这些?只需添加尾随的
&
?好吧,它有效吗?:)哦,
是干什么的?它什么也没做。整个脚本还需要完成-你用
/scriptname&
运行它吗?而且,我想,在标题和文本中键入
$
而不是
&
。啊,不,我没有-就这些?只需添加尾随的
&
?好吧,它有效吗?:)哦,
是干什么的?这没什么用。谢谢你的解释,这很有趣。键入
ls
实际有效。出于好奇,我可以在脚本中做些什么来重新绘制吗?您可以将服务器输出重定向到
/dev/null
或日志文件,这样它就不会与shell竞争了。或者,如果服务器启动时只输出一点数据,您可以在循环后添加
sleep 3
,并希望它们在不到三秒钟后停止写入。谢谢您的解释,这很有趣。键入
ls
实际有效。出于好奇,我可以在脚本中做些什么来重新绘制吗?您可以将服务器输出重定向到
/dev/null
或日志文件,这样它就不会与shell竞争了。或者,如果服务器在启动时只输出一点数据,您可以在循环后添加
sleep3
,并希望它们在不到三秒钟后停止写入。