control-flow

如何连续跟踪正在删除和重新创建的日志文件?
control-flow

如何连续跟踪正在删除和重新创建的日志文件?

我需要从每次程序运行时删除并重新创建的日志文件中提取信息。在(再次)检测到该文件存在后,我想将tail其用于某个正则表达式。 正则表达式将匹配几次,但结果总是相同的,我想只打印一次,然后在重新创建文件时返回监视。 我研究了检测文件创建的方法。一种方法是通过inotifywait,但这需要安装一个单独的包。 也许更简单的方法是利用stderr当删除和创建被尾随的文件时尾部打印: tail: '/path/to/debug.log' has become inaccessible: No such file or directory tail: '/path/t...

Admin

换行符相当于 bash 脚本中的 && 吗?
control-flow

换行符相当于 bash 脚本中的 && 吗?

我只是想知道,在 bash 脚本中,新行在功能上是否 100% 等同于&&? 例如: #!/bin/bash 7z x "${file}" mv "${file}" "${new_file}" 与 #!/bin/bash 7z x "${file}" && mv "${file}" "${new_file}" GNU bash,版本 5.1.16(1)-release (x86_64-pc-linux-gnu) ...

Admin

如何在上一个非终止命令打印特定字符串后执行命令?
control-flow

如何在上一个非终止命令打印特定字符串后执行命令?

我想执行commandA打印以下内容: line1 line2 line3 started successfully line4 ... ... 当started successfully打印该行时,我想启动另一个命令(并可能复用它们的输出,以便两者都打印在终端上)。 我怎样才能在 bash 中实现这一目标? ...

Admin

检测应用程序执行逻辑错误的工具
control-flow

检测应用程序执行逻辑错误的工具

我想检测应用程序执行逻辑中的错误。例如: 忘记调用free()返回的地址malloc() 没有关闭返回的文件句柄open() 无效标志传递给open() 传递给的文件句柄无效poll() write()调用未打开写入的 fd 将无效标志传递给open()例如 open("/etc/fstab", 4) 调用close()无效的 fd ... 我想还有数百个。 也许该工具可以类似于ftrace或运行strace,但包含错误调用的内核日志也足够了。 ...

Admin

如果 !(...) 与;如果 [ $? -eq 0] (...)
control-flow

如果 !(...) 与;如果 [ $? -eq 0] (...)

我正在编写一个 shell 脚本,并决定通过以下方式检查我的工作shellcheck.net。我能够在脚本中获得以下两行的功能相同的行为: findmnt /dev/sda1 >/dev/null ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi 与 if ! findmnt /dev/sda1 >/dev/null; then echo 0; else echo 1; fi 然而 shellcheck投掷: SC2181:直接使用“if mycmd;”检查退出代码,而不是间接使用$?。 我并...

Admin

从代码存储库执行远程脚本会导致无限循环
control-flow

从代码存储库执行远程脚本会导致无限循环

我经常使用以下模式在 GitHub 中执行远程 Bash 脚本的原始版本: wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash 一般来说,我可以毫无问题地做到这一点,但由于我将以下代码添加到某个脚本中,我得到了一个无限循环echo(即使我只是将其从 GitHub 复制粘贴到终端并直接执行,它也经常发生): while true; do read -p "...

Admin

暂停脚本执行,直到用户退出“less”
control-flow

暂停脚本执行,直到用户退出“less”

目标:less内容(来自变量),然后询问用户是否应将内容保存到文件中(即,.recovered_object)仅在那之后用户退出less. 我的脚本摘录如下: ... # Show each blob until one is chosen counter=1 while IFS='' read sha; do printf "Showing blob %d of %d" "$counter" "$BLOB_COUNT" contents=$(git show ${sha}) ${PAG...

Admin

如何在打印到 STDERR 之前修改并写入文件
control-flow

如何在打印到 STDERR 之前修改并写入文件

我正在通过 GitHub 操作进行自动拉取请求检查,并且我想在作业之间保留命令stderr输出中的一些数据。 为此,我需要stderr将人工制品文件,但在此之前我还需要通过 从中删除一些控制字符sed,否则我最终会得到类似的结果: \x1b[31mFound 344 errors!\x1b[39;49m 然后,我希望主命令返回相同的退出代码,以使检查失败并防止合并拉取请求。 我可能可以处理需要做的事情的一个子集,但无法一起处理所有 3 个事情(sed > file write > stderr)。如果这样更容易,我也可以将 和 写入stdout...

Admin

如何实现从 bash 脚本中的代码块提前退出(类似于 perl 的“last”指令)?
control-flow

如何实现从 bash 脚本中的代码块提前退出(类似于 perl 的“last”指令)?

我真正喜欢的 Perl 功能之一是它对循环控制关键字的概括任何大括号分隔的词汇块1。 例如,可以使用 Perl 的last指令退出任何此类块,如以下玩具脚本所示: #!/usr/bin/env perl use strict; my $value = $ARGV[0] || 0; my $overall_status = 'failed'; { $value > 0 and print "$value > 0\n" or last; $value > 1 and print "$value > 1\n" or last; ...

Admin

从循环调用的函数返回“继续”
control-flow

从循环调用的函数返回“继续”

我目前正在重构一个已经慢慢失去控制的脚本。我正在尝试将重复分解为函数。但是,我有一个从循环中调用的重复测试,并希望它返回continue。 Shellcheck 说 SC2104: In functions, use `return` instead of `continue`. shellcheck wiki 说不要这样做。但有办法吗? 下面是一个例子: #!/bin/sh AFunction () { if [[ "${RED}" -lt 3 ]]; then echo "cont" continue ...

Admin

如何知道一个驱动模块的代码流程?
control-flow

如何知道一个驱动模块的代码流程?

我正在研究Linux设备驱动程序,我的主要关注点是wifi驱动程序。我想知道当我插入设备时代码如何流动。也许,我可以做一些事情,比如printk在每个函数中添加一行。我拥有的设备受驱动程序支持ath9k_htc。我想出于学习目的对驱动程序代码进行一些更改。 理解 Linux 中驱动程序模块的代码流程的正确或一般方法是什么? ...

Admin

Zsh:vared 内置超时
control-flow

Zsh:vared 内置超时

我有一个 while 循环使用vared提示用户输入。我正在寻找一种方法让它超时,执行默认变量并在一定时间后没有用户输入时循环回到提示。我知道读取命令及其超时参数,但这是否可以通过vared? 另外,有没有办法设置默认值,vared使其不打印到提示符? local command while : do echo "Enter a command or type 'quit' to exit:" vared -p "[*]: " command if [ "$command" = "quit" ]; then ...

Admin

如何计算管道中间的行数
control-flow

如何计算管道中间的行数

我想计算管道中的行数,然后根据结果继续管道。 我试过 x=$(printf 'faa\nbor\nbaz\n' \ | tee /dev/stderr | wc -l) 2>&1 \ | if [[ $x -ge 2 ]]; then grep a else grep b fi 但它根本不过滤(既不过滤“a”也不过滤“b”)。这是非常出乎意料的,因为至少这些工作按预期进行: printf 'faa\nbor\nbaz\n' | if true; then grep a; else gre...

Admin

是否可以在终端命令模板循环中使用 && 运算符?
control-flow

是否可以在终端命令模板循环中使用 && 运算符?

我想制作一个更清晰易读的类似清晰命令列表,所以我做了一个小终端循环 for what in \ cache \ thumbs \ ; do my template $what:clear; done 它效果很好,但是我想达到相当于 my template cache:clear && my template thumbs:clear 有没有一种方法可以轻松清晰地放置&&在这样的循环中工作,没有复杂的添加 if/else 语句到循环体检查最后一个命令退出代码并调用break if not 0? 如果条件...

Admin