Sil*_*ash 9 shell bash shell-script
我有一个 python 脚本,它有点不稳定,时不时会出现 SSL 错误。异常是由深埋在某个库中的某个函数引发的,因此基本上没有修复它。
我通过创建一个带有 while 循环的 shell 脚本来实现一个 hacky 解决方案,该脚本运行大量次并从该循环内执行 python 脚本。
现在我希望的是,当循环的迭代开始并执行脚本时,shell 脚本内的循环保持原样,直到 python 脚本失败并且循环的下一次迭代重新执行脚本等等在。
这样做有效率吗?有没有更好的方法来做到这一点?最重要的是它是否正确?
Sté*_*las 16
在:
cmd1
cmd2
Run Code Online (Sandbox Code Playgroud)
或者
cmd1; cmd2
Run Code Online (Sandbox Code Playgroud)
它们按顺序执行。
在
cmd1 && cmd2
Run Code Online (Sandbox Code Playgroud)
或者
cmd1 || cmd2
Run Code Online (Sandbox Code Playgroud)
它们按顺序cmd2
执行,但是否完全执行取决于是cmd1
成功(for &&
)还是失败(for ||
)。
在
cmd1 | cmd2
Run Code Online (Sandbox Code Playgroud)
或者
cmd1 & cmd2
cmd1 |& cmd2 # ksh
coproc cmd1; cmd2 # bash/zsh
Run Code Online (Sandbox Code Playgroud)
或者
cmd1 <(cmd2) # ksh/zsh/bash (also yash though with a different meaning)
Run Code Online (Sandbox Code Playgroud)
它们是并发执行的。在第一种情况下,一些 shell 只cmd2
在继续执行脚本的其余部分之前等待,而另一些则同时等待两者。在第二种情况下,shells 只等待cmd2
(cmd1
被称为异步运行(或在交互式 shell 中运行时在后台运行)),而在第三种情况下cmd1
(cmd2
异步)。
在:
< "$(cmd1)" x=$(cmd2) y=$(cmd3) cmd4 "$(cmd5)" > "$(cmd6)"
Run Code Online (Sandbox Code Playgroud)
命令按顺序运行,但顺序取决于 shell。在任何情况下,cmd4
都会最后执行。
在:
cmd1 =(cmd2) # zsh
Run Code Online (Sandbox Code Playgroud)
它们按顺序执行(cmd2
首先)。
请注意,在所有这些情况下,这些命令中的任何一个都可以启动其他进程。外壳程序不知道它们,因此不可能等待它们。