所以我喜欢尽可能地强化我的 bash 脚本(并且当不能委托给像 Python/Ruby 这样的语言时)以确保错误不会被发现。
在这种情况下,我有一个 strict.sh,其中包含以下内容:
set -e
set -u
set -o pipefail
Run Code Online (Sandbox Code Playgroud)
并在其他脚本中获取它。然而,虽然 pipefail 会出现:
false | echo it kept going | true
它不会拿起:
echo The output is '`false; echo something else`'
Run Code Online (Sandbox Code Playgroud)
输出将是
输出是''
False 返回非零状态和非标准输出。在管道中它会失败,但在这里没有发现错误。当这实际上是存储在变量中的计算供以后使用,并且该值设置为空白时,这可能会导致以后出现问题。
那么 - 有没有办法让 bash 将反引号内的非零返回码视为足以退出的理由?
我们有一项常规工作,du它对许多子目录进行摘要,挑选出最严重的违规者,并使用输出来查找是否存在快速上升的事物以发现潜在问题。我们使用diff对快照来比较它们。
有一个顶级目录,有许多(几百个)子目录,每个子目录可能包含数十个(或更多)的文件。
du -s在这种情况下," " 可能非常具有 IO 攻击性,导致我们的服务器保释其缓存,然后出现大量 IO 峰值,这是非常不受欢迎的副作用。
什么策略可以用来获得相同的数据,而没有不必要的副作用?