我只是想知道我应该如何解决这个问题。我正在尝试使用这些脚本(即 java -jar snet_client.jar -mode report -id 13528 -props/int2/contact/client0.properties & )自动将报告返回到数据库。假设我有数百个带有唯一编号的命令,如脚本中所示(13528)。我需要将其放入循环中,这样我就不需要一遍又一遍地编写/复制和粘贴那数百个脚本来执行。任何建议都会有帮助。它必须在 unix 中。
最佳答案
第一个 bash 脚本将迭代文件 textfile
中的每一行,假设每个 id
值都在一行上,启动 java 进程并等待其完成,然后再启动下一个进程。
# Queueing
# This one will only start the next process when the previous one completes.
OLD_IFS=$IFS
while IFS=$'\n' read -r line_data; do
java -jar snet_client.jar -mode report -id ${line_data} -props /int2/contact/client0.properties &
wait;
done < /path/to/textfile
IFS=$OLD_IFS
或者,此脚本执行相同的操作,从文本文件获取 id
值,但不会等到第一个脚本完成后才开始下一个脚本。这可能会导致问题,因为 snet_client.jar
程序非常消耗资源:
# Non-queueing
# This starts and runs all the processes
OLD_IFS=$IFS
while IFS=$'\n' read -r line_data; do
java -jar snet_client.jar -mode report -id ${line_data} -props /int2/contact/client0.properties &
done < /path/to/textfile
IFS=$OLD_IFS
在这两者上,我们在开始之前存储当前的 IFS
值,以便我们可以在进程运行后重置它,以防万一我们需要在脚本文件中稍后将其设置回来。
我尚未测试这些(因为我没有可用的依赖项),因此您可能需要针对自己的环境进行调整。
关于linux - 需要帮助使我的程序自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768172/